summaryrefslogtreecommitdiff
path: root/libpurple/upnp.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/upnp.c')
-rw-r--r--libpurple/upnp.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/libpurple/upnp.c b/libpurple/upnp.c
index f91a70247e..3a6b3ce5ff 100644
--- a/libpurple/upnp.c
+++ b/libpurple/upnp.c
@@ -403,6 +403,11 @@ upnp_parse_description_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
lookup_internal_ip();
}
+ if (dd->inpa > 0)
+ purple_input_remove(dd->inpa);
+ if (dd->tima > 0)
+ purple_timeout_remove(dd->tima);
+
g_free(dd);
}
@@ -506,6 +511,8 @@ purple_upnp_discover_timeout(gpointer data)
if (dd->inpa)
purple_input_remove(dd->inpa);
+ if (dd->tima > 0)
+ purple_timeout_remove(dd->tima);
dd->inpa = 0;
dd->tima = 0;
@@ -610,7 +617,7 @@ purple_upnp_discover_send_broadcast(UPnPDiscoveryData *dd)
/* We have already done all our retries. Make sure that the callback
* doesn't get called before the original function returns */
- purple_timeout_add(10, purple_upnp_discover_timeout, dd);
+ dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd);
}
void
@@ -647,7 +654,7 @@ purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data)
"purple_upnp_discover(): Failed In sock creation\n");
/* Short circuit the retry attempts */
dd->retry_count = NUM_UDP_ATTEMPTS;
- purple_timeout_add(10, purple_upnp_discover_timeout, dd);
+ dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd);
return;
}
@@ -659,7 +666,7 @@ purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data)
"purple_upnp_discover(): Failed In gethostbyname\n");
/* Short circuit the retry attempts */
dd->retry_count = NUM_UDP_ATTEMPTS;
- purple_timeout_add(10, purple_upnp_discover_timeout, dd);
+ dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd);
return;
}
@@ -919,16 +926,20 @@ void purple_upnp_cancel_port_mapping(UPnPMappingAddRemove *ar)
GSList *l;
/* Remove ar from discovery_callbacks if present; it was inserted after a cb.
- * The same cb may be in the list multple times, so be careful to remove the one assocaited with ar. */
- l = discovery_callbacks;
+ * The same cb may be in the list multiple times, so be careful to remove
+ * the one associated with ar. */
+ l = discovery_callbacks;
while (l)
{
- if (l->next && (l->next->data == ar)) {
- discovery_callbacks = g_slist_delete_link(discovery_callbacks, l->next);
+ GSList *next = l->next;
+
+ if (next && (next->data == ar)) {
+ discovery_callbacks = g_slist_delete_link(discovery_callbacks, next);
+ next = l->next;
discovery_callbacks = g_slist_delete_link(discovery_callbacks, l);
}
- l = l->next;
+ l = next;
}
if (ar->tima > 0)