diff options
author | Omar Tarabai <tarabai@devegypt.com> | 2014-06-03 17:17:42 +0000 |
---|---|---|
committer | Omar Tarabai <tarabai@devegypt.com> | 2014-06-03 17:17:42 +0000 |
commit | f9cae638f0f5e6633868e14154dfd82421e5c39f (patch) | |
tree | 44c422718acd79510b0aed3741a2533a8a506179 /src/peerstore | |
parent | 1d644b000a0f0b5c12fe82a6c95d4874081b69a5 (diff) | |
download | gnunet-f9cae638f0f5e6633868e14154dfd82421e5c39f.tar.gz gnunet-f9cae638f0f5e6633868e14154dfd82421e5c39f.zip |
minor fixes
Diffstat (limited to 'src/peerstore')
-rw-r--r-- | src/peerstore/gnunet-service-peerstore.c | 24 | ||||
-rw-r--r-- | src/peerstore/peerstore_api.c | 8 |
2 files changed, 28 insertions, 4 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, | |||
117 | &cleanup_expired_records, NULL); | 117 | &cleanup_expired_records, NULL); |
118 | } | 118 | } |
119 | 119 | ||
120 | /** | ||
121 | * Search for a disconnected client and remove it | ||
122 | * | ||
123 | * @param cls closuer, a 'struct GNUNET_PEERSTORE_Record *' | ||
124 | * @param key hash of record key | ||
125 | * @param value the watcher client, a 'struct GNUNET_SERVER_Client *' | ||
126 | * @return #GNUNET_YES to continue iterating | ||
127 | */ | ||
128 | int client_disconnect_it(void *cls, | ||
129 | const struct GNUNET_HashCode *key, | ||
130 | void *value) | ||
131 | { | ||
132 | if(cls == value) | ||
133 | GNUNET_CONTAINER_multihashmap_remove(watchers, key, value); | ||
134 | return GNUNET_YES; | ||
135 | } | ||
120 | 136 | ||
121 | /** | 137 | /** |
122 | * A client disconnected. Remove all of its data structure entries. | 138 | * A client disconnected. Remove all of its data structure entries. |
@@ -129,6 +145,9 @@ handle_client_disconnect (void *cls, | |||
129 | struct GNUNET_SERVER_Client | 145 | struct GNUNET_SERVER_Client |
130 | * client) | 146 | * client) |
131 | { | 147 | { |
148 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "A client was disconnected, cleaning up.\n"); | ||
149 | GNUNET_CONTAINER_multihashmap_iterate(watchers, | ||
150 | &client_disconnect_it, client); | ||
132 | } | 151 | } |
133 | 152 | ||
134 | /** | 153 | /** |
@@ -177,9 +196,10 @@ int watch_notifier_it(void *cls, | |||
177 | struct StoreRecordMessage *srm; | 196 | struct StoreRecordMessage *srm; |
178 | 197 | ||
179 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Found a watcher to update.\n"); | 198 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Found a watcher to update.\n"); |
180 | if(NULL == value) | 199 | if(NULL == client) |
181 | { | 200 | { |
182 | GNUNET_CONTAINER_multihashmap_remove(watchers, key, value); | 201 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Removing a dead client.\n"); |
202 | GNUNET_CONTAINER_multihashmap_remove(watchers, key, client); | ||
183 | return GNUNET_YES; | 203 | return GNUNET_YES; |
184 | } | 204 | } |
185 | srm = PEERSTORE_create_record_message(record->sub_system, | 205 | 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) | |||
488 | msg_type = ntohs(msg->type); | 488 | msg_type = ntohs(msg->type); |
489 | if(GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END == msg_type) | 489 | if(GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END == msg_type) |
490 | { | 490 | { |
491 | ic->request_sent = GNUNET_NO; | ||
491 | GNUNET_PEERSTORE_iterate_cancel(ic); | 492 | GNUNET_PEERSTORE_iterate_cancel(ic); |
492 | if(NULL != callback) | 493 | if(NULL != callback) |
493 | callback(callback_cls, NULL, NULL); | 494 | callback(callback_cls, NULL, NULL); |
@@ -497,9 +498,12 @@ void handle_iterate_result (void *cls, const struct GNUNET_MessageHeader *msg) | |||
497 | { | 498 | { |
498 | record = PEERSTORE_parse_record_message(msg); | 499 | record = PEERSTORE_parse_record_message(msg); |
499 | if(NULL == record) | 500 | if(NULL == record) |
500 | continue_iter = callback(callback_cls, record, _("Received a malformed response from service.")); | 501 | continue_iter = callback(callback_cls, NULL, _("Received a malformed response from service.")); |
501 | else | 502 | else |
503 | { | ||
502 | continue_iter = callback(callback_cls, record, NULL); | 504 | continue_iter = callback(callback_cls, record, NULL); |
505 | PEERSTORE_destroy_record(record); | ||
506 | } | ||
503 | if(GNUNET_NO == continue_iter) | 507 | if(GNUNET_NO == continue_iter) |
504 | ic->callback = NULL; | 508 | ic->callback = NULL; |
505 | } | 509 | } |
@@ -638,7 +642,7 @@ void handle_watch_result (void *cls, const struct GNUNET_MessageHeader *msg) | |||
638 | wc = GNUNET_CONTAINER_multihashmap_get(h->watches, &keyhash); | 642 | wc = GNUNET_CONTAINER_multihashmap_get(h->watches, &keyhash); |
639 | if(NULL != wc->callback) | 643 | if(NULL != wc->callback) |
640 | wc->callback(wc->callback_cls, record, NULL); | 644 | wc->callback(wc->callback_cls, record, NULL); |
641 | /* TODO: destroy record */ | 645 | PEERSTORE_destroy_record(record); |
642 | } | 646 | } |
643 | 647 | ||
644 | /** | 648 | /** |