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 {