@@ -32,6 +32,7 @@ ConnectTestHttpsSession::ConnectTestHttpsSession(
3232 const std::string &targetHost, uint16_t targetPort, const std::string &targetPath, int httpVersion,
3333 const std::string &socks5Host, const std::string &socks5Port,
3434 const std::string &socks5AuthUser, const std::string &socks5AuthPwd,
35+ const std::weak_ptr<ConnectTestHttps> &parent,
3536 bool slowImpl, std::chrono::milliseconds delayTime) :
3637 executor(executor),
3738 resolver_(executor),
@@ -44,6 +45,7 @@ ConnectTestHttpsSession::ConnectTestHttpsSession(
4445 socks5Port(socks5Port),
4546 socks5AuthUser(socks5AuthUser),
4647 socks5AuthPwd(socks5AuthPwd),
48+ parent(parent),
4749 slowImpl(slowImpl),
4850 delayTime(delayTime) {
4951// std::cout << "ConnectTestHttpsSession :" << socks5Host << ":" << socks5Port << std::endl;
@@ -85,6 +87,13 @@ void ConnectTestHttpsSession::run(
8587
8688void ConnectTestHttpsSession::release () {
8789 callback.reset ();
90+ auto ptr = parent.lock ();
91+ if (ptr) {
92+ ptr->releaseConnectTestHttpsSession (shared_from_this ());
93+ ptr.reset ();
94+ } else {
95+ BOOST_LOG_S5B (warning) << " ConnectTestHttpsSession::release() parent is nullptr" ;
96+ }
8897 _isComplete = true ;
8998}
9099
@@ -723,12 +732,13 @@ ConnectTestHttps::createTest(
723732 socks5Port,
724733 socks5AuthUser,
725734 socks5AuthPwd,
735+ shared_from_this (),
726736 slowImpl,
727737 std::chrono::milliseconds{
728738 maxRandomDelay.count () > 0 ? getRandom<long long int >(0 , maxRandomDelay.count ()) : 0
729739 }
730740 );
731- sessions.push_back (s->shared_from_this ());
741+ sessions.insert (s->shared_from_this ());
732742 // sessions.front().lock();
733743 return s;
734744}
@@ -737,9 +747,13 @@ void ConnectTestHttps::do_cleanTimer() {
737747 auto c = [this , self = shared_from_this (), cleanTimer = this ->cleanTimer ]
738748 (const boost::system::error_code &e) {
739749 if (e) {
750+ BOOST_LOG_S5B (error) << " ConnectTestHttps::do_cleanTimer() c error_code " << e;
751+ boost::system::error_code ec;
752+ this ->cleanTimer ->cancel (ec);
753+ this ->cleanTimer .reset ();
740754 return ;
741755 }
742- // std::cout << "do_cleanTimer()" << std::endl ;
756+ BOOST_LOG_S5B (trace) << " ConnectTestHttps:: do_cleanTimer()" ;
743757
744758 auto it = sessions.begin ();
745759 while (it != sessions.end ()) {
@@ -776,3 +790,11 @@ void ConnectTestHttps::stop() {
776790 }
777791 }
778792}
793+
794+ void ConnectTestHttps::releaseConnectTestHttpsSession (const std::shared_ptr<ConnectTestHttpsSession> &ptr) {
795+ if (sessions.contains (ptr)) {
796+ sessions.erase (ptr);
797+ } else {
798+ BOOST_LOG_S5B (warning) << " ConnectTestHttps::releaseConnectTestHttpsSession() session not found in sessions list. double free ?" ;
799+ }
800+ }
0 commit comments