Browse Source

[5303] Use raw pointer to the timeout handler class in HTTP connections.

This prevents dangling timers after the connection has been terminated.
Marcin Siodelski 8 years ago
parent
commit
4c48a72ce9
1 changed files with 4 additions and 1 deletions
  1. 4 1
      src/lib/http/connection.cc

+ 4 - 1
src/lib/http/connection.cc

@@ -148,8 +148,11 @@ HttpConnection::acceptorCallback(const boost::system::error_code& ec) {
                   HTTP_REQUEST_RECEIVE_START)
             .arg(getRemoteEndpointAddressAsText())
             .arg(static_cast<unsigned>(request_timeout_/1000));
+        // Use 'this' instead of shared_from_this() because the IntervalTimer
+        // class already submits shared pointer to IntervalTimerImpl to
+        // protect against premature class instance destruction.
         request_timer_.setup(boost::bind(&HttpConnection::requestTimeoutCallback,
-                                         shared_from_this()),
+                                         this),
                              request_timeout_, IntervalTimer::ONE_SHOT);
         doRead();
     }