diff options
author | Tobias Markmann <tm@ayena.de> | 2015-05-20 16:01:06 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2015-05-26 15:43:35 (GMT) |
commit | e544a3ad5a8d3cdf67554384f53895fad34ff9bc (patch) | |
tree | 2807a0a190fd9592f9aedb689af3462bc507f156 /Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp | |
parent | 009e94c604e2d892ea8711ed6b3756da3eea9d04 (diff) | |
download | swift-e544a3ad5a8d3cdf67554384f53895fad34ff9bc.zip swift-e544a3ad5a8d3cdf67554384f53895fad34ff9bc.tar.bz2 |
Fix crash when sending a file to yourself
Use scoped_connection to prevent missing disconnection from signals.
Stop and free S5BServer when stopping SOCKS5BytestreamServerManager.
Test-Information:
Tried sending a file to myself multiple times and it did not crash.
Change-Id: If32075d8e9c243cab254776b924248227520e030
Diffstat (limited to 'Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp')
-rw-r--r-- | Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp b/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp index 9ab097b..e3b6d34 100644 --- a/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp +++ b/Swiften/FileTransfer/SOCKS5BytestreamServerPortForwardingUser.cpp @@ -15,14 +15,16 @@ namespace Swift { SOCKS5BytestreamServerPortForwardingUser::SOCKS5BytestreamServerPortForwardingUser(SOCKS5BytestreamServerManager* s5bServerManager) : s5bServerManager_(s5bServerManager) { // the server should be initialized, so we know what port to setup a forward for assert(s5bServerManager->isInitialized()); - assert(!s5bServerManager_->isPortForwardingReady()); - - s5bServerManager_->onPortForwardingSetup.connect(boost::bind(&SOCKS5BytestreamServerPortForwardingUser::handleServerManagerPortForwardingSetup, this, _1)); - s5bServerManager_->setupPortForwarding(); + if (s5bServerManager_->isPortForwardingReady()) { + onSetup(!s5bServerManager_->getAssistedHostAddressPorts().empty()); + } + else { + onPortForwardingSetupConnection_ = s5bServerManager_->onPortForwardingSetup.connect(boost::bind(&SOCKS5BytestreamServerPortForwardingUser::handleServerManagerPortForwardingSetup, this, _1)); + s5bServerManager_->setupPortForwarding(); + } } SOCKS5BytestreamServerPortForwardingUser::~SOCKS5BytestreamServerPortForwardingUser() { - s5bServerManager_->onPortForwardingSetup.disconnect(boost::bind(&SOCKS5BytestreamServerPortForwardingUser::handleServerManagerPortForwardingSetup, this, _1)); if (s5bServerManager_->isPortForwardingReady()) { s5bServerManager_->removePortForwarding(); } |