@@ -229,14 +229,12 @@ namespace boost { namespace network { namespace http {
229229 {
230230 input_range input =boost::make_iterator_range (new_start, read_buffer_.end ());
231231thread_pool ().post (
232- strand.wrap (
233- boost::bind (
234- callback
235- , input
236- ,boost::system::error_code ()
237- , data_end - new_start
238- , async_connection<Tag,Handler>::shared_from_this ())
239- )
232+ boost::bind (
233+ callback
234+ , input
235+ ,boost::system::error_code ()
236+ ,std::distance (new_start, data_end)
237+ , async_connection<Tag,Handler>::shared_from_this ())
240238 );
241239 new_start = read_buffer_.begin ();
242240return ;
@@ -262,11 +260,13 @@ namespace boost { namespace network { namespace http {
262260
263261void wrap_read_handler (read_callback_function callback, boost::system::error_codeconst & ec, std::size_t bytes_transferred) {
264262if (ec) error_encountered = in_place<boost::system::system_error>(ec);
263+ buffer_type::const_iterator data_start = read_buffer_.begin ()
264+ ,data_end = read_buffer_.begin ();
265+ std::advance (data_end, bytes_transferred);
265266thread_pool ().post (
266267boost::bind (
267268 callback
268- ,boost::make_iterator_range (read_buffer_.begin ()
269- ,read_buffer_.begin () + bytes_transferred)
269+ ,boost::make_iterator_range (data_start, data_end)
270270 , ec
271271 , bytes_transferred
272272 , async_connection<Tag,Handler>::shared_from_this ()));
@@ -334,7 +334,8 @@ namespace boost { namespace network { namespace http {
334334if (!ec) {
335335 logic::tribool parsed_ok;
336336 iterator_range<buffer_type::iterator> result_range, input_range;
337- data_end = new_start + bytes_transferred;
337+ data_end = read_buffer_.begin ();
338+ std::advance (data_end, bytes_transferred);
338339switch (state) {
339340case method:
340341 input_range =boost::make_iterator_range (