[tor-commits] [tor/release-0.3.1] Always start with one additional worker thread

nickm at torproject.org nickm at torproject.org
Thu Jul 27 20:31:01 UTC 2017


commit 250c88014d81fcd4406359d44c9f3f3432844a2f
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Jul 12 12:23:33 2017 -0400

    Always start with one additional worker thread
    
    Now that half the threads are permissive and half are strict, we
    need to make sure we have at least two threads, so that we'll
    have at least one of each kind.
---
 changes/more-threads | 3 +++
 src/or/cpuworker.c   | 9 ++++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/changes/more-threads b/changes/more-threads
new file mode 100644
index 000000000..eae88b70f
--- /dev/null
+++ b/changes/more-threads
@@ -0,0 +1,3 @@
+  o Minor features (relay, performance):
+    - Always start relays with at least two worker threads, to prevent
+      priority inversion on slow tasks.  Part of the fix for bug 22883.
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index ad99af64c..8d71483f8 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -89,7 +89,14 @@ cpu_init(void)
     event_add(reply_event, NULL);
   }
   if (!threadpool) {
-    threadpool = threadpool_new(get_num_cpus(get_options()),
+    /*
+      In our threadpool implementation, half the threads are permissive and
+      half are strict (when it comes to running lower-priority tasks). So we
+      always make sure we have at least two threads, so that there will be at
+      least one thread of each kind.
+    */
+    const int n_threads = get_num_cpus(get_options()) + 1;
+    threadpool = threadpool_new(n_threads,
                                 replyqueue,
                                 worker_state_new,
                                 worker_state_free,





More information about the tor-commits mailing list