[tor-commits] [obfsproxy/master] We now close all listeners on SIGINT, instead of simply disabling them.
nickm at torproject.org
nickm at torproject.org
Thu Jul 14 15:39:26 UTC 2011
commit 5639f2e5d6987e49d6d30b5d880c883fd2a87ee5
Author: George Kadianakis <desnacked at gmail.com>
Date: Sat Jul 9 00:21:50 2011 +0200
We now close all listeners on SIGINT, instead of simply disabling them.
---
src/main.c | 42 +++++++++++++++++-------------------------
src/network.c | 11 -----------
src/network.h | 1 -
3 files changed, 17 insertions(+), 37 deletions(-)
diff --git a/src/main.c b/src/main.c
index 56ea9c9..621a3c9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -61,21 +61,29 @@ usage(void)
}
/**
- Disables all active listeners.
+ Frees all active listeners.
*/
static void
-disable_all_listeners(void)
+free_all_listeners(void)
{
+ static int called_already=0;
+
+ if (called_already)
+ return;
if (!ll)
return;
- log_info("Disabling all listeners.");
- /* Iterate listener doubly linked list and disable them all. */
+ log_info("Closing all listeners.");
+
+ /* Iterate listener doubly linked list and free them all. */
dll_node_t *ll_node = ll->head;
while (ll_node) {
- listener_disable(ll_node->data);
- ll_node = ll_node->next;
+ listener_free(ll_node->data);
+ dll_remove(ll, ll_node);
+ ll_node = ll->head;
}
+
+ called_already++;
}
/**
@@ -94,14 +102,10 @@ handle_signal_cb(evutil_socket_t fd, short what, void *arg)
{
int signum = (int) fd;
static int got_sigint=0;
- static int disabled_listeners=0;
switch (signum) {
case SIGINT:
- if (!disabled_listeners) {
- disable_all_listeners();
- disabled_listeners++;
- }
+ free_all_listeners();
if (!got_sigint) {
log_info("Got SIGINT. Preparing shutdown.");
start_shutdown(0);
@@ -112,10 +116,6 @@ handle_signal_cb(evutil_socket_t fd, short what, void *arg)
}
break;
case SIGTERM:
- if (!disabled_listeners) {
- disable_all_listeners();
- disabled_listeners++;
- }
log_info("Got SIGTERM. Terminating.");
start_shutdown(1);
break;
@@ -431,17 +431,9 @@ main(int argc, const char **argv)
if (close_obfsproxy_logfile() < 0)
printf("Failed closing logfile!\n");
- /* Free all listeners in our listener dll. */
- if (ll) {
- dll_node_t *ll_node = ll->head;
- while (ll_node) {
- listener_free(ll_node->data);
- dll_remove(ll, ll_node);
- ll_node = ll->head;
- }
- /* free dll memory */
+ free_all_listeners(); /* free all listeners in our listener dll */
+ if (ll) /* free listener dll */
free(ll);
- }
free(protocol_options);
free(n_options_array);
diff --git a/src/network.c b/src/network.c
index 1103eeb..b29e9dd 100644
--- a/src/network.c
+++ b/src/network.c
@@ -144,17 +144,6 @@ listener_new(struct event_base *base,
return lsn;
}
-/**
- Disable listener 'lsn'.
-*/
-void
-listener_disable(listener_t *lsn)
-{
- assert(lsn);
-
- evconnlistener_disable(lsn->listener);
-}
-
void
listener_free(listener_t *lsn)
{
diff --git a/src/network.h b/src/network.h
index a8c02ac..28a0d7d 100644
--- a/src/network.h
+++ b/src/network.h
@@ -46,7 +46,6 @@ struct addrinfo;
listener_t *listener_new(struct event_base *base,
struct protocol_params_t *params);
void listener_free(listener_t *listener);
-void listener_disable(listener_t *lsn);
void start_shutdown(int barbaric);
More information about the tor-commits
mailing list