浏览代码

Fixed thread pool problem.

yhirose 6 年之前
父节点
当前提交
3629f87627
共有 1 个文件被更改,包括 9 次插入6 次删除
  1. 9 6
      httplib.h

+ 9 - 6
httplib.h

@@ -335,15 +335,18 @@ private:
 
     void operator()() {
       for (;;) {
-        std::unique_lock<std::mutex> lock(pool_.mutex_);
+        std::function<void()> fn;
+        {
+          std::unique_lock<std::mutex> lock(pool_.mutex_);
 
-        pool_.cond_.wait(
-            lock, [&] { return !pool_.jobs_.empty() || pool_.shutdown_; });
+          pool_.cond_.wait(
+              lock, [&] { return !pool_.jobs_.empty() || pool_.shutdown_; });
 
-        if (pool_.shutdown_) { break; }
+          if (pool_.shutdown_) { break; }
 
-        auto fn = pool_.jobs_.front();
-        pool_.jobs_.pop_front();
+          fn = pool_.jobs_.front();
+          pool_.jobs_.pop_front();
+        }
 
         assert(true == (bool)fn);
         fn();