|
@@ -116,23 +116,22 @@ SctpTransport::SctpTransport(std::shared_ptr<Transport> lower, uint16_t port, me
|
|
if (usrsctp_bind(mSock, reinterpret_cast<struct sockaddr *>(&sconn), sizeof(sconn)))
|
|
if (usrsctp_bind(mSock, reinterpret_cast<struct sockaddr *>(&sconn), sizeof(sconn)))
|
|
throw std::runtime_error("Could not bind usrsctp socket, errno=" + std::to_string(errno));
|
|
throw std::runtime_error("Could not bind usrsctp socket, errno=" + std::to_string(errno));
|
|
|
|
|
|
- mConnectThread = std::thread(&SctpTransport::runConnectAndSendLoop, this);
|
|
|
|
|
|
+ mSendThread = std::thread(&SctpTransport::runConnectAndSendLoop, this);
|
|
}
|
|
}
|
|
|
|
|
|
SctpTransport::~SctpTransport() {
|
|
SctpTransport::~SctpTransport() {
|
|
- onRecv(nullptr);
|
|
|
|
|
|
+ onRecv(nullptr); // unset recv callback
|
|
mStopping = true;
|
|
mStopping = true;
|
|
mConnectCondition.notify_all();
|
|
mConnectCondition.notify_all();
|
|
mSendQueue.stop();
|
|
mSendQueue.stop();
|
|
|
|
|
|
- if (mConnectThread.joinable())
|
|
|
|
- mConnectThread.join();
|
|
|
|
-
|
|
|
|
if (mSock) {
|
|
if (mSock) {
|
|
usrsctp_shutdown(mSock, SHUT_RDWR);
|
|
usrsctp_shutdown(mSock, SHUT_RDWR);
|
|
usrsctp_close(mSock);
|
|
usrsctp_close(mSock);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ mSendThread.join();
|
|
|
|
+
|
|
usrsctp_deregister_address(this);
|
|
usrsctp_deregister_address(this);
|
|
GlobalCleanup();
|
|
GlobalCleanup();
|
|
}
|
|
}
|