ithewei vor 6 Jahren
Ursprung
Commit
9be22ef01f
2 geänderte Dateien mit 15 neuen und 9 gelöschten Zeilen
  1. 10 8
      http/server/HttpServer.cpp
  2. 5 1
      http/server/HttpServer.h

+ 10 - 8
http/server/HttpServer.cpp

@@ -278,14 +278,14 @@ static void fsync_logfile(hidle_t* idle) {
     hlog_fsync();
 }
 
-// for implement http_server_stop
-static hloop_t* s_loop = NULL;
-
 static void worker_proc(void* userdata) {
     http_server_t* server = (http_server_t*)userdata;
     int listenfd = server->listenfd;
     hloop_t* loop = hloop_new(0);
-    s_loop = loop;
+    // for SDK implement http_server_stop
+    if (server->worker_processes == 0) {
+        server->privdata = (void*)loop;
+    }
     // one loop one readbuf.
     HBuf readbuf;
     readbuf.resize(RECV_BUFSIZE);
@@ -350,11 +350,13 @@ int http_server_run(http_server_t* server, int wait) {
     return 0;
 }
 
-// for SDK, just use for singleton
 int http_server_stop(http_server_t* server) {
-    if (s_loop) {
-        hloop_stop(s_loop);
-        s_loop = NULL;
+    if (server->worker_processes == 0) {
+        if (server->privdata) {
+            hloop_t* loop = (hloop_t*)server->privdata;
+            hloop_stop(loop);
+            server->privdata = NULL;
+        }
     }
     return 0;
 }

+ 5 - 1
http/server/HttpServer.h

@@ -10,8 +10,10 @@ typedef struct http_server_s {
     int http_version;
     HttpService* service;
     int worker_processes;
+    void* userdata;
 //private:
     int listenfd;
+    void* privdata;
 
 #ifdef __cplusplus
     http_server_s() {
@@ -22,6 +24,8 @@ typedef struct http_server_s {
         service = NULL;
         worker_processes = 0;
         listenfd = -1;
+        userdata = NULL;
+        privdata = NULL;
     }
 #endif
 } http_server_t;
@@ -47,7 +51,7 @@ int main() {
  */
 int http_server_run(http_server_t* server, int wait = 1);
 
-// for SDK, just use for singleton
+// for SDK
 int http_server_stop(http_server_t* server);
 
 #endif