return min;
}
+/** Switch all logs to output at most verbose level. */
+void switch_logs_debug(void)
+{
+ logfile_t *lf;
+ for (lf = logfiles; lf; lf=lf->next) {
+ lf->loglevel = LOG_DEBUG;
+ }
+}
+
/*
Local Variables:
mode:c
#endif
int add_callback_log(int loglevelMin, int loglevelMax, log_callback cb);
int get_min_log_level(void);
+void switch_logs_debug(void);
void close_logs(void);
void reset_logs(void);
void add_temp_log(void);
VAR("DirPort", UINT, DirPort, "0"),
VAR("DirBindAddress", LINELIST, DirBindAddress, NULL),
VAR("DirFetchPeriod", INTERVAL, DirFetchPeriod, "1 hour"),
- VAR("DirPostPeriod", INTERVAL, DirPostPeriod, "10 mintues"),
+ VAR("DirPostPeriod", INTERVAL, DirPostPeriod, "10 minutes"),
VAR("RendPostPeriod", INTERVAL, RendPostPeriod, "10 minutes"),
VAR("DirPolicy", LINELIST, DirPolicy, NULL),
VAR("DirServer", LINELIST, DirServers, NULL),
}
}
-/** Initiatialize the global read bucket to options->BandwidthBurst,
+/** Initialize the global read bucket to options->BandwidthBurst,
* and current_time to the current time. */
void connection_bucket_init(void) {
or_options_t *options = get_options();
/* If we haven't gotten enough data last interval, guess that
* we'll be used at our maximum capacity. This is unlikely to be
* so, but it will give us an okay first estimate, and we'll stay
- * up until we send Max ytes. Next interval, we'll choose
+ * up until we send Max bytes. Next interval, we'll choose
* our starting time based on how much we sent this interval.
*/
expected_bandwidth_usage = max_configured;
#ifndef MS_WINDOWS /* do signal stuff only on unix */
static int please_dumpstats=0; /**< Whether we should dump stats during the loop. */
+static int please_debug=0; /**< Whether we should switch all logs to -l debug. */
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. */
}
#endif
#ifndef MS_WINDOWS /* do signal stuff only on unix */
- if(please_shutdown) {
+ if (please_shutdown) {
if(!server_mode(get_options())) { /* do it now */
log(LOG_NOTICE,"Interrupt: exiting cleanly.");
tor_cleanup();
hibernate_begin_shutdown();
please_shutdown = 0;
}
- if(please_sigpipe) {
+ if (please_sigpipe) {
log(LOG_NOTICE,"Caught sigpipe. Ignoring.");
please_sigpipe = 0;
}
- if(please_dumpstats) {
+ 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);
please_dumpstats = 0;
}
- if(please_reset) {
+ if (please_debug) {
+ switch_logs_debug();
+ please_debug = 0;
+ }
+ if (please_reset) {
if (do_hup() < 0) {
log_fn(LOG_WARN,"Restart failed (config error?). Exiting.");
tor_cleanup();
}
please_reset = 0;
}
- if(please_reap_children) {
+ if (please_reap_children) {
while(waitpid(-1,NULL,WNOHANG) > 0) ; /* keep reaping until no more zombies */
please_reap_children = 0;
}
poll_result = tor_poll(poll_array, nfds, timeout);
/* let catch() handle things like ^c, and otherwise don't worry about it */
- if(poll_result < 0) {
+ if (poll_result < 0) {
/* let the program survive things like ^z */
if(tor_socket_errno(-1) != EINTR) {
log_fn(LOG_ERR,"poll failed: %s [%d]",
}
/* do all the reads and errors first, so we can detect closed sockets */
- for(i=0;i<nfds;i++)
+ for (i=0;i<nfds;i++)
conn_read(i); /* this also marks broken connections */
/* then do the writes */
- for(i=0;i<nfds;i++)
+ for (i=0;i<nfds;i++)
conn_write(i);
/* any of the conns need to be closed now? */
- for(i=0;i<nfds;i++)
+ for (i=0;i<nfds;i++)
conn_close_if_marked(i);
/* refilling buckets and sending cells happens at the beginning of the
case SIGUSR1:
please_dumpstats = 1;
break;
+ case SIGUSR2:
+ please_debug = 1;
+ break;
case SIGCHLD:
please_reap_children = 1;
break;