-fixing main FS build, updating man page of gnunet-pseudonym
[oweals/gnunet.git] / src / fs / gnunet-service-fs_pe.c
index 853197964fedfe42bd5585adb692042b335d8ada..5c63e7b66c0906f06047aa6e0ad953681ab28de8 100644 (file)
@@ -391,6 +391,9 @@ transmit_message_callback (void *cls, size_t buf_size, void *buf)
   if (NULL == buf)
   {
     /* failed, try again... */
+    if (GNUNET_SCHEDULER_NO_TASK != pp->task)
+      GNUNET_SCHEDULER_cancel (pp->task);
+
     pp->task = GNUNET_SCHEDULER_add_now (&schedule_peer_transmission, pp);
     GNUNET_STATISTICS_update (GSF_stats,
                               gettext_noop
@@ -401,12 +404,16 @@ transmit_message_callback (void *cls, size_t buf_size, void *buf)
   rp = GNUNET_CONTAINER_heap_peek (pp->priority_heap);
   if (NULL == rp)
   {
+    if (GNUNET_SCHEDULER_NO_TASK != pp->task)
+      GNUNET_SCHEDULER_cancel (pp->task);
     pp->task = GNUNET_SCHEDULER_add_now (&schedule_peer_transmission, pp);
     return 0;
   }
   msize = GSF_pending_request_get_message_ (get_latest (rp), buf_size, buf);
   if (msize > buf_size)
   {
+    if (GNUNET_SCHEDULER_NO_TASK != pp->task)
+      GNUNET_SCHEDULER_cancel (pp->task);
     /* buffer to small (message changed), try again */
     pp->task = GNUNET_SCHEDULER_add_now (&schedule_peer_transmission, pp);
     return 0;
@@ -532,7 +539,7 @@ merge_pr (void *cls, const struct GNUNET_HashCode * query, void *element)
       GSF_pending_request_is_compatible_ (mpr->pr, rp->pe_head->pr))
     return GNUNET_YES;
   /* merge new request with existing request plan */
-  bi = GNUNET_malloc (sizeof (struct GSF_PendingRequestPlanBijection));
+  bi = GNUNET_new (struct GSF_PendingRequestPlanBijection);
   bi->rp = rp;
   bi->pr = mpr->pr;
   prd = GSF_pending_request_get_data_ (mpr->pr);
@@ -578,7 +585,7 @@ GSF_plan_add_ (struct GSF_ConnectedPeer *cp, struct GSF_PendingRequest *pr)
   pp = GNUNET_CONTAINER_multihashmap_get (plans, &id->hashPubKey);
   if (NULL == pp)
   {
-    pp = GNUNET_malloc (sizeof (struct PeerPlan));
+    pp = GNUNET_new (struct PeerPlan);
     pp->plan_map = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO);
     pp->priority_heap =
         GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX);
@@ -608,8 +615,8 @@ GSF_plan_add_ (struct GSF_ConnectedPeer *cp, struct GSF_PendingRequest *pr)
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Planning transmission of query `%s' to peer `%s'\n",
               GNUNET_h2s (&prd->query), GNUNET_i2s (id));
-  rp = GNUNET_malloc (sizeof (struct GSF_RequestPlan)); // 8 MB
-  bi = GNUNET_malloc (sizeof (struct GSF_PendingRequestPlanBijection));
+  rp = GNUNET_new (struct GSF_RequestPlan); // 8 MB
+  bi = GNUNET_new (struct GSF_PendingRequestPlanBijection);
   bi->rp = rp;
   bi->pr = pr;
   GNUNET_CONTAINER_MDLL_insert (PR, prd->pr_head, prd->pr_tail, bi);
@@ -700,7 +707,7 @@ GSF_plan_notify_peer_disconnect_ (const struct GSF_ConnectedPeer *cp)
  *
  * @param pr_head request plan reference list to check.
  * @param sender the peer that we've sent the request to.
- * @param result the timestamp to fill.
+ * @param result the timestamp to fill, set to "FOREVER" if never transmitted
  * @return GNUNET_YES if 'result' was changed, GNUNET_NO otherwise.
  */
 int
@@ -714,7 +721,10 @@ GSF_request_plan_reference_get_last_transmission_ (
   {
     if (bi->rp->pp->cp == sender)
     {
-      *result = bi->rp->last_transmission;
+      if (0 == bi->rp->last_transmission.abs_value)
+       *result = GNUNET_TIME_UNIT_FOREVER_ABS;
+      else
+       *result = bi->rp->last_transmission;
       return GNUNET_YES;
     }
   }