mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
More win32 fixes: 1) tolerate extra "readable" events better. 2) when being multithreaded, leave parent fdarray open.
svn:r3092
This commit is contained in:
+4
-1
@@ -125,6 +125,9 @@ int connection_cpu_process_inbuf(connection_t *conn) {
|
||||
tor_assert(conn);
|
||||
tor_assert(conn->type == CONN_TYPE_CPUWORKER);
|
||||
|
||||
if (!buf_datalen(conn->inbuf))
|
||||
return 0;
|
||||
|
||||
if (conn->state == CPUWORKER_STATE_BUSY_ONION) {
|
||||
if (buf_datalen(conn->inbuf) < LEN_ONION_RESPONSE) /* entire answer available? */
|
||||
return 0; /* not yet */
|
||||
@@ -206,9 +209,9 @@ static int cpuworker_main(void *data) {
|
||||
char tag[TAG_LEN];
|
||||
crypto_pk_env_t *onion_key = NULL, *last_onion_key = NULL;
|
||||
|
||||
tor_close_socket(fdarray[0]); /* this is the side of the socketpair the parent uses */
|
||||
fd = fdarray[1]; /* this side is ours */
|
||||
#ifndef MS_WINDOWS
|
||||
tor_close_socket(fdarray[0]); /* this is the side of the socketpair the parent uses */
|
||||
connection_free_all(); /* so the child doesn't hold the parent's fd's open */
|
||||
#endif
|
||||
handle_signals(0); /* ignore interrupts from the keyboard, etc */
|
||||
|
||||
+3
-3
@@ -581,8 +581,8 @@ int connection_dns_process_inbuf(connection_t *conn) {
|
||||
tor_assert(conn);
|
||||
tor_assert(conn->type == CONN_TYPE_DNSWORKER);
|
||||
|
||||
if (conn->state != DNSWORKER_STATE_BUSY) {
|
||||
log_fn(LOG_WARN,"Bug: poll() indicated than an idle dns worker was readable. Please report.");
|
||||
if (conn->state != DNSWORKER_STATE_BUSY && buf_datalen(conn->inbuf)) {
|
||||
log_fn(LOG_WARN,"Bug: read data from an idle dns worker. Please report.");
|
||||
return 0;
|
||||
}
|
||||
if (buf_datalen(conn->inbuf) < 5) /* entire answer available? */
|
||||
@@ -653,9 +653,9 @@ static int dnsworker_main(void *data) {
|
||||
int fd;
|
||||
int result;
|
||||
|
||||
tor_close_socket(fdarray[0]); /* this is the side of the socketpair the parent uses */
|
||||
fd = fdarray[1]; /* this side is ours */
|
||||
#ifndef MS_WINDOWS
|
||||
tor_close_socket(fdarray[0]); /* this is the side of the socketpair the parent uses */
|
||||
connection_free_all(); /* so the child doesn't hold the parent's fd's open */
|
||||
#endif
|
||||
handle_signals(0); /* ignore interrupts from the keyboard, etc */
|
||||
|
||||
Reference in New Issue
Block a user