summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2005-01-03 18:06:51 +0000
committerNick Mathewson <nickm@torproject.org>2005-01-03 18:06:51 +0000
commitead52e0bdcf72d03a51b6f092607591a51fcdb20 (patch)
tree0ff4213dbea20ea5337d3ee6300011b1e02d7430
parentc173c4724973fff0fc0d878bc85db2cfc347300f (diff)
downloadtor-ead52e0bdcf72d03a51b6f092607591a51fcdb20.tar.gz
tor-ead52e0bdcf72d03a51b6f092607591a51fcdb20.zip
Possible fix for task #43: when running on a multithreaded environment (currently only windows), threads should not close opposite sides of their socketpairs, and workers should not call connection_free_all(). This may fix win32 servers.
svn:r3247
-rw-r--r--src/common/compat.h6
-rw-r--r--src/or/cpuworker.c4
-rw-r--r--src/or/dns.c4
3 files changed, 12 insertions, 2 deletions
diff --git a/src/common/compat.h b/src/common/compat.h
index dafd1339a5..d9cb5669d6 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -191,5 +191,11 @@ void tor_mutex_acquire(tor_mutex_t *m);
void tor_mutex_release(tor_mutex_t *m);
void tor_mutex_free(tor_mutex_t *m);
+#ifdef MS_WINDOWS
+#define TOR_IS_MULTITHREADED 1
+#else
+#undef TOR_IS_MULTITHREADED
+#endif
+
#endif
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index b1fef2660b..c9ac3ebee4 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -210,7 +210,7 @@ static int cpuworker_main(void *data) {
crypto_pk_env_t *onion_key = NULL, *last_onion_key = NULL;
fd = fdarray[1]; /* this side is ours */
-#ifndef MS_WINDOWS
+#ifndef TOR_IS_MULTITHREADED
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
@@ -282,7 +282,9 @@ static int spawn_cpuworker(void) {
spawn_func(cpuworker_main, (void*)fd);
log_fn(LOG_DEBUG,"just spawned a worker.");
+#ifndef TOR_IS_MULTITHREADED
tor_close_socket(fd[1]); /* we don't need the worker's side of the pipe */
+#endif
conn = connection_new(CONN_TYPE_CPUWORKER);
diff --git a/src/or/dns.c b/src/or/dns.c
index 57871bf23f..afc777dd7e 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -654,7 +654,7 @@ static int dnsworker_main(void *data) {
int result;
fd = fdarray[1]; /* this side is ours */
-#ifndef MS_WINDOWS
+#ifndef TOR_IS_MULTITHREADED
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
@@ -716,7 +716,9 @@ static int spawn_dnsworker(void) {
spawn_func(dnsworker_main, (void*)fd);
log_fn(LOG_DEBUG,"just spawned a worker.");
+#ifndef TOR_IS_MULTITHREADED
tor_close_socket(fd[1]); /* we don't need the worker's side of the pipe */
+#endif
conn = connection_new(CONN_TYPE_DNSWORKER);