consider deletion of egos we don't know; make code less obscure
authorlurchi <lurchi@strangeplace.net>
Fri, 2 Feb 2018 18:39:30 +0000 (19:39 +0100)
committerlurchi <lurchi@strangeplace.net>
Fri, 2 Feb 2018 18:39:30 +0000 (19:39 +0100)
src/social/gnunet-service-social.c

index 21158acd537c502cf2436c8eb526c220b506283b..bac08ae9da0ea27dea901f81401dc5e8f5031973 100644 (file)
@@ -3599,30 +3599,34 @@ identity_recv_ego (void *cls, struct GNUNET_IDENTITY_Ego *id_ego,
   GNUNET_CRYPTO_hash (&ego_pub_key, sizeof (ego_pub_key), &ego_pub_hash);
 
   struct Ego *ego = GNUNET_CONTAINER_multihashmap_get (egos, &ego_pub_hash);
+  if (NULL == ego && NULL == name)
+  {
+    // an ego that is none of our business has been deleted
+    return;
+  }
   if (NULL != ego)
   {
+    // one of our egos has been changed
     GNUNET_free (ego->name);
-    if (NULL == name) // deleted
+    if (NULL == name)
     {
+      // one of our egos has been deleted
       GNUNET_CONTAINER_multihashmap_remove (egos, &ego_pub_hash, ego);
       GNUNET_free (ego);
-      ego = NULL;
+      return;
     }
   }
   else
   {
     ego = GNUNET_malloc (sizeof (*ego));
   }
-  if (NULL != ego)
-  {
-    ego->key = *(GNUNET_IDENTITY_ego_get_private_key (id_ego));
-    size_t name_size = strlen (name) + 1;
-    ego->name = GNUNET_malloc (name_size);
-    GNUNET_memcpy (ego->name, name, name_size);
+  ego->key = *(GNUNET_IDENTITY_ego_get_private_key (id_ego));
+  size_t name_size = strlen (name) + 1;
+  ego->name = GNUNET_malloc (name_size);
+  GNUNET_memcpy (ego->name, name, name_size);
 
-    GNUNET_CONTAINER_multihashmap_put (egos, &ego_pub_hash, ego,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
-  }
+  GNUNET_CONTAINER_multihashmap_put (egos, &ego_pub_hash, ego,
+                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
 
   // FIXME: notify clients about changed ego
 }