#30187: 100% cpu usage in winthreads tor_cond_wait --------------------------------------+------------------------------ Reporter: bolvan | Owner: (none) Type: defect | Status: new Priority: Medium | Component: Core Tor/Tor Version: Tor: 0.3.5.8 | Severity: Normal Keywords: winthreads tor_cond_wait | Actual Points: Parent ID: | Points: Reviewer: | Sponsor: --------------------------------------+------------------------------ For years I run relay using self-compiled win64 version of tor. Compiler mingw64. Relay runs well for some time but suddenly starts using 100% cpu all cores. I traced where it happens. The following loop never ends :
{{{ do { DWORD res; res = WaitForSingleObject(cond->event, ms); EnterCriticalSection(&cond->lock); if (cond->n_to_wake && cond->generation != generation_at_start) { --cond->n_to_wake; --cond->n_waiting; result = 0; waiting = 0; goto out; } else if (res != WAIT_OBJECT_0) { result = (res==WAIT_TIMEOUT) ? 1 : -1; --cond->n_waiting; waiting = 0; goto out; } else if (ms != INFINITE) { endTime = GetTickCount(); if (startTime + ms_orig <= endTime) { result = 1; /* Timeout */ --cond->n_waiting; waiting = 0; goto out; } else { ms = startTime + ms_orig - endTime; } } /* If we make it here, we are still waiting. */ if (cond->n_to_wake == 0) { /* There is nobody else who should wake up; reset * the event. */ ResetEvent(cond->event); } out: LeaveCriticalSection(&cond->lock); } while (waiting); }}} res = WAIT_OBJECT_0; ms = INFINITE; cond->n_to_wake=0x11 cond->generation=0x28 generation_at_start=0x28 it means no path with "goto out" ever execute more than one thread run this loop and each one eat separate core Some people I shared binaries with report same problem. Pls check -- Ticket URL: <https://trac.torproject.org/projects/tor/ticket/30187> Tor Bug Tracker & Wiki <https://trac.torproject.org/> The Tor Project: anonymity online
_______________________________________________ tor-bugs mailing list tor-bugs@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs