Loading doc/TODO +3 −3 Original line number Diff line number Diff line Loading @@ -46,9 +46,9 @@ For 0.1.0.x: - Is it the buf_shrink bug? (Quite possibly) - Instrument the 0.1.1 code to figure out where our memory is going; apply the results. (all platforms?) - Why does kevent barf with EINVAL on some freebsd boxes? - Submit libevent patch to Niels - Warn on non-repeated EINVAL in Tor (don't die.) . Why does kevent barf with EINVAL on some freebsd boxes? o Submit libevent patch to Niels o Warn on non-repeated EINVAL in Tor (don't die.) - Investigate why freebsd kernel actually does this: it doesn't seem simple to trigger. Loading src/or/config.c +2 −1 Original line number Diff line number Diff line Loading @@ -2684,7 +2684,8 @@ check_libevent_version(const char *m, const char *v, int server) tor_assert(m && v); if (!strcmp(m, "kqueue")) { if (!strcmp(v, "1.0c")) { if (!strcmp(v, "1.0c") || !strcmp(v, "1.0d") || !strcmp(v, "1.0e") || !strcmp(v, "1.1")) { buggy = 1; } } else if (!strcmp(m, "epoll")) { Loading src/or/main.c +22 −0 Original line number Diff line number Diff line Loading @@ -810,6 +810,7 @@ run_scheduled_events(time_t now) } static struct event *timeout_event = NULL; static int n_libevent_errors = 0; /** Libevent callback: invoked once every second. */ static void Loading @@ -829,6 +830,8 @@ second_elapsed_callback(int fd, short event, void *args) one_second.tv_usec = 0; } n_libevent_errors = 0; /* log_fn(LOG_NOTICE, "Tick."); */ tor_gettimeofday(&now); Loading Loading @@ -885,6 +888,19 @@ second_elapsed_callback(int fd, short event, void *args) "Error from libevent when setting one-second timeout event"); } /** Called when a possibly ignorable libevent error occurs; ensures that we * don't get into an infinite loop by ignoring too many errors from * libevent. */ int got_libevent_error(void) { if (++n_libevent_errors > 8) { log_fn(LOG_ERR, "Too many libevent errors in one second; dying"); return -1; } return 0; } /** Called when we get a SIGHUP: reload configuration files and keys, * retry all connections, re-upload all descriptors, and so on. */ static int Loading Loading @@ -1001,6 +1017,12 @@ do_main_loop(void) tor_socket_strerror(e), e); #endif return -1; #ifndef MS_WINDOWS } else if (e == EINVAL) { log_fn(LOG_WARN, "EINVAL from libevent: should you upgrade libevent?"); if (got_libevent_error()) return -1; #endif } else { if (ERRNO_IS_EINPROGRESS(e)) log_fn(LOG_WARN,"libevent poll returned EINPROGRESS? Please report."); Loading Loading
doc/TODO +3 −3 Original line number Diff line number Diff line Loading @@ -46,9 +46,9 @@ For 0.1.0.x: - Is it the buf_shrink bug? (Quite possibly) - Instrument the 0.1.1 code to figure out where our memory is going; apply the results. (all platforms?) - Why does kevent barf with EINVAL on some freebsd boxes? - Submit libevent patch to Niels - Warn on non-repeated EINVAL in Tor (don't die.) . Why does kevent barf with EINVAL on some freebsd boxes? o Submit libevent patch to Niels o Warn on non-repeated EINVAL in Tor (don't die.) - Investigate why freebsd kernel actually does this: it doesn't seem simple to trigger. Loading
src/or/config.c +2 −1 Original line number Diff line number Diff line Loading @@ -2684,7 +2684,8 @@ check_libevent_version(const char *m, const char *v, int server) tor_assert(m && v); if (!strcmp(m, "kqueue")) { if (!strcmp(v, "1.0c")) { if (!strcmp(v, "1.0c") || !strcmp(v, "1.0d") || !strcmp(v, "1.0e") || !strcmp(v, "1.1")) { buggy = 1; } } else if (!strcmp(m, "epoll")) { Loading
src/or/main.c +22 −0 Original line number Diff line number Diff line Loading @@ -810,6 +810,7 @@ run_scheduled_events(time_t now) } static struct event *timeout_event = NULL; static int n_libevent_errors = 0; /** Libevent callback: invoked once every second. */ static void Loading @@ -829,6 +830,8 @@ second_elapsed_callback(int fd, short event, void *args) one_second.tv_usec = 0; } n_libevent_errors = 0; /* log_fn(LOG_NOTICE, "Tick."); */ tor_gettimeofday(&now); Loading Loading @@ -885,6 +888,19 @@ second_elapsed_callback(int fd, short event, void *args) "Error from libevent when setting one-second timeout event"); } /** Called when a possibly ignorable libevent error occurs; ensures that we * don't get into an infinite loop by ignoring too many errors from * libevent. */ int got_libevent_error(void) { if (++n_libevent_errors > 8) { log_fn(LOG_ERR, "Too many libevent errors in one second; dying"); return -1; } return 0; } /** Called when we get a SIGHUP: reload configuration files and keys, * retry all connections, re-upload all descriptors, and so on. */ static int Loading Loading @@ -1001,6 +1017,12 @@ do_main_loop(void) tor_socket_strerror(e), e); #endif return -1; #ifndef MS_WINDOWS } else if (e == EINVAL) { log_fn(LOG_WARN, "EINVAL from libevent: should you upgrade libevent?"); if (got_libevent_error()) return -1; #endif } else { if (ERRNO_IS_EINPROGRESS(e)) log_fn(LOG_WARN,"libevent poll returned EINPROGRESS? Please report."); Loading