minor fixes
authorOmar Tarabai <tarabai@devegypt.com>
Tue, 3 Jun 2014 17:17:42 +0000 (17:17 +0000)
committerOmar Tarabai <tarabai@devegypt.com>
Tue, 3 Jun 2014 17:17:42 +0000 (17:17 +0000)
src/peerstore/gnunet-service-peerstore.c
src/peerstore/peerstore_api.c
src/sensor/gnunet-sensor.c

index febebc63a5a989ad983ef077a4fc20a33bcfedf3..5d3ea6bb10f9e975724f1a48546268c963497a38 100644 (file)
@@ -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,
index 62b4c370527b9d6a8bfb49c006d700deb00dea0c..238c7be194db57c5db0ac796dc846f8eee6ea3e9 100644 (file)
@@ -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);
 }
 
 /**
index 0b4dd6da1d29a3ad9a2e4a59b52d1ce68ac7789a..22a854d42c2dd1196e37cc1d6498786e70f9e80b 100644 (file)
@@ -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;
 }