diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-05-10 11:35:02 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-05-10 11:35:27 +0200 |
commit | d3245124b4b2918c6dbd64aa237e96d96279e48b (patch) | |
tree | 73907ac010f4f5483401d3fc240da51c67dfca5f | |
parent | f3e122bcb96dde2d406a6005013d96e67a045cd3 (diff) |
fix crash on monitor disconnect
-rw-r--r-- | src/namestore/gnunet-service-namestore.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index a92b8104a5..ffc76a9117 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c @@ -918,6 +918,8 @@ client_disconnect_cb (void *cls, client); for (struct ZoneMonitor *zm = monitor_head; NULL != zm; zm = zm->next) { + struct StoreActivity *san; + if (nc != zm->nc) continue; GNUNET_CONTAINER_DLL_remove (monitor_head, @@ -928,11 +930,13 @@ client_disconnect_cb (void *cls, GNUNET_SCHEDULER_cancel (zm->task); zm->task = NULL; } - for (struct StoreActivity *sa = sa_head; NULL != sa; sa = sa->next) + for (struct StoreActivity *sa = sa_head; NULL != sa; sa = san) { + san = sa->next; if (zm == sa->zm_pos) { sa->zm_pos = zm->next; + /* this may free sa */ continue_store_activity (sa); } } @@ -943,6 +947,7 @@ client_disconnect_cb (void *cls, { if (sa->nc == nc) { + /* this may free sa */ free_store_activity (sa); break; /* there can only be one per nc */ } |