diff options
Diffstat (limited to 'src/or/main.c')
-rw-r--r-- | src/or/main.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/or/main.c b/src/or/main.c index 8076403940..bea5dbe1f4 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -49,6 +49,7 @@ static int nfds=0; /**< Number of connections currently active. */ static int please_dumpstats=0; /**< Whether we should dump stats during the loop. */ static int please_reset=0; /**< Whether we just got a sighup. */ static int please_reap_children=0; /**< Whether we should waitpid for exited children. */ +static int please_sigpipe=0; /**< Whether we've caught a sigpipe lately. */ static int please_shutdown=0; /**< Whether we should shut down Tor. */ #endif /* signal stuff */ @@ -833,6 +834,10 @@ static int do_main_loop(void) { } please_shutdown = 0; } + if(please_sigpipe) { + log(LOG_NOTICE,"Caught sigpipe. Ignoring."); + please_sigpipe = 0; + } if(please_dumpstats) { /* prefer to log it at INFO, but make sure we always see it */ dumpstats(get_min_log_level()>LOG_INFO ? get_min_log_level() : LOG_INFO); @@ -898,7 +903,9 @@ static void catch(int the_signal) { please_shutdown = 1; break; case SIGPIPE: - log(LOG_NOTICE,"Caught sigpipe. Ignoring."); + /* don't log here, since it's possible you got the sigpipe because + * your log failed! */ + please_sigpipe = 1; break; case SIGHUP: please_reset = 1; @@ -911,6 +918,8 @@ static void catch(int the_signal) { break; default: log(LOG_WARN,"Caught signal %d that we can't handle??", the_signal); + tor_cleanup(); + exit(1); } #endif /* signal stuff */ } |