From 301587b46996a0298a146af56651f6d28ddeb81f Mon Sep 17 00:00:00 2001 From: ipknHama Date: Sun, 14 Sep 2014 20:12:18 +0900 Subject: fix example_chat crash bug when using (req, res) handler --- include/http_connection.h | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/http_connection.h b/include/http_connection.h index 877eb21..31808e4 100644 --- a/include/http_connection.h +++ b/include/http_connection.h @@ -199,7 +199,6 @@ namespace crow ctx_ = detail::context(); req.middleware_context = (void*)&ctx_; detail::middleware_call_helper<0, decltype(ctx_), decltype(middlewares_), Middlewares...>(middlewares_, req, res, ctx_); - CROW_LOG_DEBUG << "ALATDA " << req.url; if (!res.completed_) { @@ -224,6 +223,8 @@ namespace crow if (need_to_call_after_handlers_) { + need_to_call_after_handlers_ = false; + // call all after_handler of middlewares detail::after_handlers_call_helper< ((int)sizeof...(Middlewares)-1), @@ -333,6 +334,13 @@ namespace crow do_write(); res.clear(); + + if (need_to_start_read_after_complete_) + { + need_to_start_read_after_complete_ = false; + start_deadline(); + do_read(); + } } private: @@ -376,11 +384,16 @@ namespace crow CROW_LOG_DEBUG << this << " from read(1)"; check_destroy(); } - else + else if (!need_to_call_after_handlers_) { start_deadline(); do_read(); } + else + { + // res will be completed later by user + need_to_start_read_after_complete_ = true; + } }); } @@ -465,6 +478,7 @@ namespace crow bool is_reading{}; bool is_writing{}; bool need_to_call_after_handlers_; + bool need_to_start_read_after_complete_{}; std::tuple& middlewares_; detail::context ctx_; -- cgit v1.2.3-54-g00ecf