Browse Source

Moved instance unregistering to impl::SctpTransport::close()

Paul-Louis Ageneau 3 years ago
parent
commit
9990f48e20
1 changed files with 15 additions and 14 deletions
  1. 15 14
      src/impl/sctptransport.cpp

+ 15 - 14
src/impl/sctptransport.cpp

@@ -187,9 +187,6 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
 
 
 	PLOG_DEBUG << "Initializing SCTP transport";
 	PLOG_DEBUG << "Initializing SCTP transport";
 
 
-	usrsctp_register_address(this);
-	Instances->insert(this);
-
 	mSock = usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, nullptr, nullptr, 0, nullptr);
 	mSock = usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, nullptr, nullptr, 0, nullptr);
 	if (!mSock)
 	if (!mSock)
 		throw std::runtime_error("Could not create SCTP socket, errno=" + std::to_string(errno));
 		throw std::runtime_error("Could not create SCTP socket, errno=" + std::to_string(errno));
@@ -323,14 +320,14 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
 	if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &sndBuf, sizeof(sndBuf)))
 	if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &sndBuf, sizeof(sndBuf)))
 		throw std::runtime_error("Could not set SCTP send buffer size, errno=" +
 		throw std::runtime_error("Could not set SCTP send buffer size, errno=" +
 		                         std::to_string(errno));
 		                         std::to_string(errno));
+
+	usrsctp_register_address(this);
+	Instances->insert(this);
 }
 }
 
 
 SctpTransport::~SctpTransport() {
 SctpTransport::~SctpTransport() {
 	stop();
 	stop();
 	close();
 	close();
-
-	usrsctp_deregister_address(this);
-	Instances->erase(this);
 }
 }
 
 
 void SctpTransport::start() {
 void SctpTransport::start() {
@@ -355,14 +352,6 @@ bool SctpTransport::stop() {
 	return true;
 	return true;
 }
 }
 
 
-void SctpTransport::close() {
-	if (mSock) {
-		mProcessor.join();
-		usrsctp_close(mSock);
-		mSock = nullptr;
-	}
-}
-
 struct sockaddr_conn SctpTransport::getSockAddrConn(uint16_t port) {
 struct sockaddr_conn SctpTransport::getSockAddrConn(uint16_t port) {
 	struct sockaddr_conn sconn = {};
 	struct sockaddr_conn sconn = {};
 	sconn.sconn_family = AF_CONN;
 	sconn.sconn_family = AF_CONN;
@@ -412,6 +401,18 @@ void SctpTransport::shutdown() {
 	mWrittenCondition.notify_all();
 	mWrittenCondition.notify_all();
 }
 }
 
 
+void SctpTransport::close() {
+	if (!mSock)
+		return;
+
+	usrsctp_deregister_address(this);
+	Instances->erase(this);
+
+	mProcessor.join();
+	usrsctp_close(mSock);
+	mSock = nullptr;
+}
+
 bool SctpTransport::send(message_ptr message) {
 bool SctpTransport::send(message_ptr message) {
 	std::lock_guard lock(mSendMutex);
 	std::lock_guard lock(mSendMutex);