[tor-commits] [tor/master] Fix a work-counting bug introduced by the workqueue merge

nickm at torproject.org nickm at torproject.org
Thu Feb 5 17:19:09 UTC 2015


commit 227422155721597d7ad528749f7295e92f1ce9fc
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Feb 5 12:17:08 2015 -0500

    Fix a work-counting bug introduced by the workqueue merge
    
    David Goulet finds that when he runs a busy relay for a while with the
    latest version of the git code, the number of onionskins handled
    slowly dwindles to zero, with total_pending_tasks wedged at its
    maximum value.
    
    I conjecture this is because the total_pending_tasks variable isn't
    decremented when we successfully cancel a job.  Fixed that.
    
    Fixes bug 14741; bugfix not on any released version of tor.
---
 src/or/cpuworker.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 3ddb37a..5e8b32d 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -298,6 +298,7 @@ cpuworker_onion_handshake_replyfn(void *work_)
   cpuworker_reply_t rpl;
   or_circuit_t *circ = NULL;
 
+  tor_assert(total_pending_tasks > 0);
   --total_pending_tasks;
 
   /* Could avoid this, but doesn't matter. */
@@ -553,6 +554,8 @@ cpuworker_cancel_circ_handshake(or_circuit_t *circ)
     /* It successfully cancelled. */
     memwipe(job, 0xe0, sizeof(*job));
     tor_free(job);
+    tor_assert(total_pending_tasks > 0);
+    --total_pending_tasks;
   }
 
   circ->workqueue_entry = NULL;



More information about the tor-commits mailing list