From f9cae638f0f5e6633868e14154dfd82421e5c39f Mon Sep 17 00:00:00 2001 From: Omar Tarabai Date: Tue, 3 Jun 2014 17:17:42 +0000 Subject: [PATCH] minor fixes --- src/peerstore/gnunet-service-peerstore.c | 24 ++++++++++++++++++++++-- src/peerstore/peerstore_api.c | 8 ++++++-- src/sensor/gnunet-sensor.c | 4 +--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/peerstore/gnunet-service-peerstore.c b/src/peerstore/gnunet-service-peerstore.c index febebc63a..5d3ea6bb1 100644 --- a/src/peerstore/gnunet-service-peerstore.c +++ b/src/peerstore/gnunet-service-peerstore.c @@ -117,6 +117,22 @@ cleanup_expired_records(void *cls, &cleanup_expired_records, NULL); } +/** + * Search for a disconnected client and remove it + * + * @param cls closuer, a 'struct GNUNET_PEERSTORE_Record *' + * @param key hash of record key + * @param value the watcher client, a 'struct GNUNET_SERVER_Client *' + * @return #GNUNET_YES to continue iterating + */ +int client_disconnect_it(void *cls, + const struct GNUNET_HashCode *key, + void *value) +{ + if(cls == value) + GNUNET_CONTAINER_multihashmap_remove(watchers, key, value); + return GNUNET_YES; +} /** * A client disconnected. Remove all of its data structure entries. @@ -129,6 +145,9 @@ handle_client_disconnect (void *cls, struct GNUNET_SERVER_Client * client) { + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "A client was disconnected, cleaning up.\n"); + GNUNET_CONTAINER_multihashmap_iterate(watchers, + &client_disconnect_it, client); } /** @@ -177,9 +196,10 @@ int watch_notifier_it(void *cls, struct StoreRecordMessage *srm; GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Found a watcher to update.\n"); - if(NULL == value) + if(NULL == client) { - GNUNET_CONTAINER_multihashmap_remove(watchers, key, value); + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Removing a dead client.\n"); + GNUNET_CONTAINER_multihashmap_remove(watchers, key, client); return GNUNET_YES; } srm = PEERSTORE_create_record_message(record->sub_system, diff --git a/src/peerstore/peerstore_api.c b/src/peerstore/peerstore_api.c index 62b4c3705..238c7be19 100644 --- a/src/peerstore/peerstore_api.c +++ b/src/peerstore/peerstore_api.c @@ -488,6 +488,7 @@ void handle_iterate_result (void *cls, const struct GNUNET_MessageHeader *msg) msg_type = ntohs(msg->type); if(GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END == msg_type) { + ic->request_sent = GNUNET_NO; GNUNET_PEERSTORE_iterate_cancel(ic); if(NULL != callback) callback(callback_cls, NULL, NULL); @@ -497,9 +498,12 @@ void handle_iterate_result (void *cls, const struct GNUNET_MessageHeader *msg) { record = PEERSTORE_parse_record_message(msg); if(NULL == record) - continue_iter = callback(callback_cls, record, _("Received a malformed response from service.")); + continue_iter = callback(callback_cls, NULL, _("Received a malformed response from service.")); else + { continue_iter = callback(callback_cls, record, NULL); + PEERSTORE_destroy_record(record); + } if(GNUNET_NO == continue_iter) ic->callback = NULL; } @@ -638,7 +642,7 @@ void handle_watch_result (void *cls, const struct GNUNET_MessageHeader *msg) wc = GNUNET_CONTAINER_multihashmap_get(h->watches, &keyhash); if(NULL != wc->callback) wc->callback(wc->callback_cls, record, NULL); - /* TODO: destroy record */ + PEERSTORE_destroy_record(record); } /** diff --git a/src/sensor/gnunet-sensor.c b/src/sensor/gnunet-sensor.c index 0b4dd6da1..22a854d42 100644 --- a/src/sensor/gnunet-sensor.c +++ b/src/sensor/gnunet-sensor.c @@ -79,10 +79,7 @@ void print_sensor_info(void *cls, return; } if(NULL == sensor) /* no more sensors from service */ - { - GNUNET_SCHEDULER_shutdown(); return; - } printf("Name: %s\nVersion: %d.%d\n", sensor->name, sensor->version_major, @@ -132,6 +129,7 @@ run (void *cls, NULL); } + GNUNET_SCHEDULER_shutdown(); ret = 0; } -- 2.25.1