diff options
Diffstat (limited to '3rdParty/Boost/src/boost/asio/detail/impl/task_io_service.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/asio/detail/impl/task_io_service.hpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/3rdParty/Boost/src/boost/asio/detail/impl/task_io_service.hpp b/3rdParty/Boost/src/boost/asio/detail/impl/task_io_service.hpp index a002189..ee23cb9 100644 --- a/3rdParty/Boost/src/boost/asio/detail/impl/task_io_service.hpp +++ b/3rdParty/Boost/src/boost/asio/detail/impl/task_io_service.hpp @@ -36,7 +36,19 @@ void task_io_service::dispatch(Handler handler) boost_asio_handler_invoke_helpers::invoke(handler, handler); } else - post(handler); + { + // Allocate and construct an operation to wrap the handler. + typedef completion_handler<Handler> op; + typename op::ptr p = { boost::addressof(handler), + boost_asio_handler_alloc_helpers::allocate( + sizeof(op), handler), 0 }; + p.p = new (p.v) op(handler); + + BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "dispatch")); + + post_immediate_completion(p.p); + p.v = p.p = 0; + } } template <typename Handler> @@ -49,6 +61,8 @@ void task_io_service::post(Handler handler) sizeof(op), handler), 0 }; p.p = new (p.v) op(handler); + BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "post")); + post_immediate_completion(p.p); p.v = p.p = 0; } |