From c7c9e6915281826e3027bc215ddffb14c2a72e47 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 11 Jul 2011 14:35:44 +0000 Subject: [PATCH] proper cleanup --- src/nat/nat.c | 3 ++- src/nat/nat_mini.c | 25 ++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/nat/nat.c b/src/nat/nat.c index 9d7d3ee72..bf9565877 100644 --- a/src/nat/nat.c +++ b/src/nat/nat.c @@ -1316,7 +1316,8 @@ GNUNET_NAT_unregister (struct GNUNET_NAT_Handle *h) GNUNET_CONTAINER_DLL_remove (h->mini_head, h->mini_tail, ml); - GNUNET_NAT_mini_map_stop (ml->mini); + if (NULL != ml->mini) + GNUNET_NAT_mini_map_stop (ml->mini); GNUNET_free (ml); } if (h->ext_dns != NULL) diff --git a/src/nat/nat_mini.c b/src/nat/nat_mini.c index be8f63f66..c8ac65edb 100644 --- a/src/nat/nat_mini.c +++ b/src/nat/nat_mini.c @@ -399,7 +399,7 @@ process_map_output (void *cls, * @param is_tcp GNUNET_YES to map TCP, GNUNET_NO for UDP * @param ac function to call with mapping result * @param ac_cls closure for 'ac' - * @return NULL on error + * @return NULL on error (no 'upnpc' installed) */ struct GNUNET_NAT_MiniHandle * GNUNET_NAT_mini_map_start (uint16_t port, @@ -410,6 +410,9 @@ GNUNET_NAT_mini_map_start (uint16_t port, struct GNUNET_NAT_MiniHandle *ret; char pstr[6]; + if (GNUNET_SYSERR == + GNUNET_OS_check_helper_binary ("upnpc")) + return NULL; ret = GNUNET_malloc (sizeof (struct GNUNET_NAT_MiniHandle)); ret->ac = ac; ret->ac_cls = ac_cls; @@ -474,16 +477,6 @@ GNUNET_NAT_mini_map_stop (struct GNUNET_NAT_MiniHandle *mini) { char pstr[6]; - if (! mini->did_map) - { - if (mini->map_cmd != NULL) - { - GNUNET_OS_command_stop (mini->map_cmd); - mini->map_cmd = NULL; - } - GNUNET_free (mini); - return; - } if (GNUNET_SCHEDULER_NO_TASK != mini->refresh_task) { GNUNET_SCHEDULER_cancel (mini->refresh_task); @@ -494,6 +487,16 @@ GNUNET_NAT_mini_map_stop (struct GNUNET_NAT_MiniHandle *mini) GNUNET_OS_command_stop (mini->refresh_cmd); mini->refresh_cmd = NULL; } + if (! mini->did_map) + { + if (mini->map_cmd != NULL) + { + GNUNET_OS_command_stop (mini->map_cmd); + mini->map_cmd = NULL; + } + GNUNET_free (mini); + return; + } mini->ac (mini->ac_cls, GNUNET_NO, (const struct sockaddr*) &mini->current_addr, sizeof (mini->current_addr)); -- 2.25.1