Reset context shared_ptr in AsyncTimeout::cancelTimeout()
authorPingjia Shan <pingjia@fb.com>
Tue, 28 Nov 2017 06:10:59 +0000 (22:10 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 28 Nov 2017 06:22:27 +0000 (22:22 -0800)
commitacbd746f5036bf795cc62022f0114b4b08032d82
treed307ce1db31cc13b1444d26807acea31195b6323
parentdb13010c1338d471c713a652e0940afba627b8bc
Reset context shared_ptr in AsyncTimeout::cancelTimeout()

Summary:
This seems to fix issue in the attached task.

`context_` is set in `scheduleTimeout()` and never gets reset. So when an AsyncTimeout object is held across requests by objects like `IOThreadPool0` in I/O Thread Pool used by wangle/acceptor/ConnectionManager, RequestContext object created for the last request is leaked until `IOThreadPool0` handles another request and overrides `context_`. In the issue described in attached task, unit test has single request, next request never comes in, RequestContext doesn't end until test service stops, logging feature relying on RequestContext dtor doesn't get called in time, and thus unit test fails.

Reviewed By: yfeldblum

Differential Revision: D6402268

fbshipit-source-id: 200c6d358dfa6d7d9aa68ab05f6f1c7f4117b0ec
folly/io/async/AsyncTimeout.cpp
folly/io/async/test/AsyncTimeoutTest.cpp