Commit 87e3800d authored by Roger Dingledine's avatar Roger Dingledine
Browse files

Finally solve the "closing wedged cpuworkers" bug. Woo.

This happened when we got two create cells in a row from the same TLS
connection. It would hand one to the cpuworker, and then immediately
handle the second one -- after it had registered that the first one was
busy, but before it had updated the timestamp that we use to decide how
*long* it's been busy.


svn:r6606
parent d90d4b4c
......@@ -476,6 +476,10 @@ assign_to_cpuworker(connection_t *cpuworker, uint8_t question_type,
tag_pack(tag, circ->p_conn->addr, circ->p_conn->port, circ->p_circ_id);
cpuworker->state = CPUWORKER_STATE_BUSY_ONION;
/* touch the lastwritten timestamp, since that's how we check to
* see how long it's been since we asked the question, and sometimes
* we check before the first call to connection_handle_write(). */
cpuworker->timestamp_lastwritten = time(NULL);
num_cpuworkers_busy++;
connection_write_to_buf((char*)&question_type, 1, cpuworker);
......
......@@ -701,6 +701,10 @@ assign_to_dnsworker(connection_t *exitconn)
tor_free(dnsconn->address);
dnsconn->address = tor_strdup(exitconn->address);
dnsconn->state = DNSWORKER_STATE_BUSY;
/* touch the lastwritten timestamp, since that's how we check to
* see how long it's been since we asked the question, and sometimes
* we check before the first call to connection_handle_write(). */
dnsconn->timestamp_lastwritten = time(NULL);
num_dnsworkers_busy++;
len = strlen(dnsconn->address);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment