Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / rps / gnunet-service-rps_peers.c
index 49b1545474e08168b4ab7bf353681813a07f3d4d..e0b278bd00225d9cfc85281cedfe4360409cde47 100644 (file)
@@ -874,7 +874,7 @@ restore_valid_peers ()
   char *buf;
   ssize_t size_read;
   char *iter_buf;
-  const char *str_repr;
+  char *str_repr;
   const struct GNUNET_PeerIdentity *peer;
 
   if (0 == strncmp ("DISABLE", filename_valid_peers, 7))
@@ -903,11 +903,14 @@ restore_valid_peers ()
   {
     str_repr = GNUNET_strndup (iter_buf, 53);
     peer = s2i_full (str_repr);
+    GNUNET_free (str_repr);
     add_valid_peer (peer);
     LOG (GNUNET_ERROR_TYPE_DEBUG,
         "Restored valid peer %s from disk\n",
         GNUNET_i2s_full (peer));
   }
+  iter_buf = NULL;
+  GNUNET_free (buf);
   LOG (GNUNET_ERROR_TYPE_DEBUG,
       "num_peers: %" PRIu32 ", _size (valid_peers): %u\n",
       num_peers,
@@ -1070,26 +1073,26 @@ Peers_issue_peer_liveliness_check (const struct GNUNET_PeerIdentity *peer)
 
 
 /**
- * @brief Remove unecessary data
+ * @brief Check if peer is removable.
  *
- * If the other peer is not intending to send messages, we have messages pending
- * to be sent to this peer and we are not waiting for a reply, remove the
- * information about it (its #PeerContext).
+ * Check if
+ *  - a recv channel exists
+ *  - there are pending messages
+ *  - there is no pending pull reply
  *
- * @param peer the peer to clean
- * @return #GNUNET_YES if peer was removed
- *         #GNUNET_NO  otherwise
+ * @param peer the peer in question
+ * @return #GNUNET_YES    if peer is removable
+ *         #GNUNET_NO     if peer is NOT removable
+ *         #GNUNET_SYSERR if peer is not known
  */
 int
-Peers_clean_peer (const struct GNUNET_PeerIdentity *peer)
+Peers_check_removable (const struct GNUNET_PeerIdentity *peer)
 {
   struct PeerContext *peer_ctx;
 
-  // TODO actually remove unnecessary data
-
   if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (peer_map, peer))
   {
-    return GNUNET_NO;
+    return GNUNET_SYSERR;
   }
 
   peer_ctx = get_peer_ctx (peer);
@@ -1099,7 +1102,6 @@ Peers_clean_peer (const struct GNUNET_PeerIdentity *peer)
   {
     return GNUNET_NO;
   }
-  Peers_remove_peer (peer);
   return GNUNET_YES;
 }
 
@@ -1150,11 +1152,15 @@ Peers_remove_peer (const struct GNUNET_PeerIdentity *peer)
   }
   if (NULL != peer_ctx->send_channel)
   {
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Destroying send channel\n");
     GNUNET_CADET_channel_destroy (peer_ctx->send_channel);
     peer_ctx->send_channel = NULL;
   }
   if (NULL != peer_ctx->recv_channel)
   {
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Destroying recv channel\n");
     GNUNET_CADET_channel_destroy (peer_ctx->recv_channel);
     peer_ctx->recv_channel = NULL;
   }