[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r30903 - gnunet/src/set
From: |
gnunet |
Subject: |
[GNUnet-SVN] r30903 - gnunet/src/set |
Date: |
Wed, 27 Nov 2013 12:43:12 +0100 |
Author: dold
Date: 2013-11-27 12:43:12 +0100 (Wed, 27 Nov 2013)
New Revision: 30903
Modified:
gnunet/src/set/set_api.c
Log:
- fixed use after free due to uncanceled task
Modified: gnunet/src/set/set_api.c
===================================================================
--- gnunet/src/set/set_api.c 2013-11-27 10:43:27 UTC (rev 30902)
+++ gnunet/src/set/set_api.c 2013-11-27 11:43:12 UTC (rev 30903)
@@ -200,6 +200,11 @@
* Time to wait until we try to reconnect on failure.
*/
struct GNUNET_TIME_Relative reconnect_backoff;
+
+ /**
+ * Task for reconnecting when the listener fails.
+ */
+ GNUNET_SCHEDULER_TaskIdentifier reconnect_task;
};
@@ -357,7 +362,7 @@
GNUNET_MQ_destroy (lh->mq);
lh->mq = NULL;
- GNUNET_SCHEDULER_add_delayed (lh->reconnect_backoff, listen_connect, lh);
+ lh->reconnect_task = GNUNET_SCHEDULER_add_delayed (lh->reconnect_backoff,
listen_connect, lh);
lh->reconnect_backoff = GNUNET_TIME_STD_BACKOFF (lh->reconnect_backoff);
}
@@ -651,6 +656,14 @@
GNUNET_MQ_HANDLERS_END
};
+ if ((tc != NULL) &&(tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "listener not reconnecting due to
shutdown\n");
+ return;
+ }
+
+ lh->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
+
GNUNET_assert (NULL == lh->client);
lh->client = GNUNET_CLIENT_connect ("set", lh->cfg);
if (NULL == lh->client)
@@ -722,6 +735,11 @@
GNUNET_CLIENT_disconnect (lh->client);
lh->client = NULL;
}
+ if (GNUNET_SCHEDULER_NO_TASK != lh->reconnect_task)
+ {
+ GNUNET_SCHEDULER_cancel (lh->reconnect_task);
+ lh->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
+ }
GNUNET_free (lh);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r30903 - gnunet/src/set,
gnunet <=