&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.
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);
}
/**
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,
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);
{
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;
}
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);
}
/**