فهرست منبع

fixbug: multi-threads vector push_back

hewei.it 5 سال پیش
والد
کامیت
a6e3172567
1فایلهای تغییر یافته به همراه3 افزوده شده و 0 حذف شده
  1. 3 0
      http/server/HttpServer.cpp

+ 3 - 0
http/server/HttpServer.cpp

@@ -17,6 +17,7 @@ static FileCache    s_filecache;
 
 struct HttpServerPrivdata {
     std::vector<hloop_t*>   loops;
+    std::mutex              loops_mutex;
 };
 
 static void on_recv(hio_t* io, void* _buf, int readbytes) {
@@ -279,7 +280,9 @@ static void worker_fn(void* userdata) {
     hevent_set_userdata(timer, &s_filecache);
     // for SDK implement http_server_stop
     HttpServerPrivdata* privdata = (HttpServerPrivdata*)server->privdata;
+    privdata->loops_mutex.lock();
     privdata->loops.push_back(loop);
+    privdata->loops_mutex.unlock();
     hloop_run(loop);
     hloop_free(&loop);
 }