diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 9fc627f2221699af2c4f52c4e01eaf11bdf0896e..a239e3d14987d66cf4c6a3a9f242407f26da8412 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2238,7 +2238,7 @@ cleanup:
 	ast_free(me);
 cleanup2:
 	fclose(ser->f);
-	ast_free(ser);
+	ser = ast_tcptls_server_instance_destroy(ser);
 
 	if (req.socket.lock) {
 		ast_mutex_destroy(req.socket.lock);
diff --git a/include/asterisk/tcptls.h b/include/asterisk/tcptls.h
index 3d7a2c9793016a2371f6e1674284f0a7c76648b7..814e433a1ae579313614c8e52be6adaa213bb1bc 100644
--- a/include/asterisk/tcptls.h
+++ b/include/asterisk/tcptls.h
@@ -166,4 +166,11 @@ void *ast_make_file_from_fd(void *data);
 HOOK_T ast_tcptls_server_read(struct ast_tcptls_server_instance *ser, void *buf, size_t count);
 HOOK_T ast_tcptls_server_write(struct ast_tcptls_server_instance *ser, void *buf, size_t count);
 
+/*!
+ * \brief Destroy a server instance
+ *
+ * \return NULL for convenience
+ */
+struct ast_tcptls_server_instance *ast_tcptls_server_instance_destroy(struct ast_tcptls_server_instance *i);
+
 #endif /* _ASTERISK_SERVER_H */
diff --git a/main/http.c b/main/http.c
index 11db1779c87d969af55a08010ade9ce31190690c..7588461e2110a5559bee81e4ddd3d5deb986b120 100644
--- a/main/http.c
+++ b/main/http.c
@@ -827,7 +827,7 @@ static void *httpd_helper_thread(void *data)
 
 done:
 	fclose(ser->f);
-	ast_free(ser);
+	ser = ast_tcptls_server_instance_destroy(ser);
 	return NULL;
 }
 
diff --git a/main/manager.c b/main/manager.c
index ec8362b08828b2545d821918dcc24e60301bcd79..f8267a4ca45bb439d6dd0d164b9f9d4000939877 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -2882,7 +2882,7 @@ static void *session_do(void *data)
 	destroy_session(s);
 
 done:
-	ast_free(ser);
+	ser = ast_tcptls_server_instance_destroy(ser);
 	return NULL;
 }
 
diff --git a/main/tcptls.c b/main/tcptls.c
index d623420a508e4074fe546983ad0dc36a057a7c7d..658ab25ee5de0298987726e2f09606596a501190 100644
--- a/main/tcptls.c
+++ b/main/tcptls.c
@@ -446,3 +446,9 @@ void *ast_make_file_from_fd(void *data)
 	else
 		return ser;
 }
+
+struct ast_tcptls_server_instance *ast_tcptls_server_instance_destroy(struct ast_tcptls_server_instance *i)
+{
+	ast_free(i);
+	return NULL;
+}