From: Omar Tarabai Date: Tue, 3 Jun 2014 17:17:42 +0000 (+0000) Subject: minor fixes X-Git-Tag: initial-import-from-subversion-38251~3859 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f9cae638f0f5e6633868e14154dfd82421e5c39f;p=oweals%2Fgnunet.git minor fixes --- 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; }