DISPATCH-2098 - Stop HTTP server before the AMQP server (#1182)
diff --git a/src/dispatch.c b/src/dispatch.c
index 67b7cad..ddb3eb5 100644
--- a/src/dispatch.c
+++ b/src/dispatch.c
@@ -363,6 +363,10 @@
void qd_dispatch_free(qd_dispatch_t *qd)
{
if (!qd) return;
+
+ /* Stop HTTP threads immediately */
+ qd_http_server_free(qd_server_http(qd->server));
+
free(qd->sasl_config_path);
free(qd->sasl_config_name);
qd_connection_manager_free(qd->connection_manager);
diff --git a/src/server.c b/src/server.c
index 0a3aa93..b758d72 100644
--- a/src/server.c
+++ b/src/server.c
@@ -1375,13 +1375,14 @@
return qd_server;
}
+qd_http_server_t *qd_server_http(qd_server_t *qd_server) {
+ return qd_server->http;
+}
void qd_server_free(qd_server_t *qd_server)
{
if (!qd_server) return;
- qd_http_server_free(qd_server->http);
-
qd_connection_t *ctx = DEQ_HEAD(qd_server->conn_list);
while (ctx) {
qd_log(qd_server->log_source, QD_LOG_INFO,
diff --git a/src/server_private.h b/src/server_private.h
index b64b6de..ad45ba6 100644
--- a/src/server_private.h
+++ b/src/server_private.h
@@ -93,6 +93,8 @@
pn_proactor_t* qd_server_proactor(qd_server_t *s);
+qd_http_server_t *qd_server_http(qd_server_t *server);
+
typedef void (*qd_server_event_handler_t) (pn_event_t *e, qd_server_t *qd_server, void *context);
typedef struct qd_handler_context_t {