aboutsummaryrefslogtreecommitdiff
path: root/src/peerinfo
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-06-23 10:57:02 +0000
committerChristian Grothoff <christian@grothoff.org>2011-06-23 10:57:02 +0000
commit2a988c01cffe975a527995e25891da895b7b02ef (patch)
tree89c7ba489a2228351dce450f1489b690de221ae3 /src/peerinfo
parente386b0559c9dce3bf4ff382c37ff72ffe7850de4 (diff)
downloadgnunet-2a988c01cffe975a527995e25891da895b7b02ef.tar.gz
gnunet-2a988c01cffe975a527995e25891da895b7b02ef.zip
possibly fixing leak at #1700/4451
Diffstat (limited to 'src/peerinfo')
-rw-r--r--src/peerinfo/peerinfo_api.c68
1 files changed, 22 insertions, 46 deletions
diff --git a/src/peerinfo/peerinfo_api.c b/src/peerinfo/peerinfo_api.c
index 4db776b55..b6ccdfd07 100644
--- a/src/peerinfo/peerinfo_api.c
+++ b/src/peerinfo/peerinfo_api.c
@@ -272,28 +272,22 @@ do_transmit (void *cls, size_t size, void *buf)
272 size_t ret; 272 size_t ret;
273 273
274 h->th = NULL; 274 h->th = NULL;
275 if (tqe == NULL)
276 return 0;
275 if (buf == NULL) 277 if (buf == NULL)
276 { 278 {
277 GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, 279 GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK,
278 _("Failed to transmit message to `%s' service.\n"), 280 _("Failed to transmit message to `%s' service.\n"),
279 "PEERINFO"); 281 "PEERINFO");
280 if (tqe != NULL) 282 GNUNET_CONTAINER_DLL_remove (h->tq_head,
281 GNUNET_CONTAINER_DLL_remove (h->tq_head, 283 h->tq_tail,
282 h->tq_tail, 284 tqe);
283 tqe);
284 reconnect (h); 285 reconnect (h);
285 if (tqe != NULL) 286 if (tqe->cont != NULL)
286 { 287 tqe->cont (tqe->cont_cls, GNUNET_SYSERR);
287 if (tqe->cont != NULL) 288 GNUNET_free (tqe);
288 tqe->cont (tqe->cont_cls, GNUNET_SYSERR);
289 GNUNET_free (tqe);
290 }
291 return 0; 289 return 0;
292 } 290 }
293 /* If it can be NULL above, it can be NULL here to... */
294 if (tqe == NULL)
295 return 0;
296
297 ret = tqe->size; 291 ret = tqe->size;
298 GNUNET_assert (size >= ret); 292 GNUNET_assert (size >= ret);
299 memcpy (buf, &tqe[1], ret); 293 memcpy (buf, &tqe[1], ret);
@@ -445,17 +439,12 @@ peerinfo_handler (void *cls,
445 ic->h->in_receive = GNUNET_NO; 439 ic->h->in_receive = GNUNET_NO;
446 if (msg == NULL) 440 if (msg == NULL)
447 { 441 {
448 char *err_msg;
449 GNUNET_asprintf(&err_msg,
450 _("Failed to receive response from `%s' service."),
451 "PEERINFO");
452 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%s\n", err_msg);
453 reconnect (ic->h); 442 reconnect (ic->h);
454 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK) 443 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK)
455 GNUNET_SCHEDULER_cancel (ic->timeout_task); 444 GNUNET_SCHEDULER_cancel (ic->timeout_task);
456 if (ic->callback != NULL) 445 if (ic->callback != NULL)
457 ic->callback (ic->callback_cls, NULL, NULL, err_msg); 446 ic->callback (ic->callback_cls, NULL, NULL,
458 GNUNET_free (err_msg); 447 _("Failed to receive response from `PEERINFO' service."));
459 GNUNET_free (ic); 448 GNUNET_free (ic);
460 return; 449 return;
461 } 450 }
@@ -478,16 +467,13 @@ peerinfo_handler (void *cls,
478 if ((ms < sizeof (struct InfoMessage)) || 467 if ((ms < sizeof (struct InfoMessage)) ||
479 (ntohs (msg->type) != GNUNET_MESSAGE_TYPE_PEERINFO_INFO)) 468 (ntohs (msg->type) != GNUNET_MESSAGE_TYPE_PEERINFO_INFO))
480 { 469 {
481 char * err_msg;
482 GNUNET_asprintf(&err_msg,_("Received invalid message from `%s' service.\n"),"PEERINFO");
483 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,err_msg);
484 GNUNET_break (0); 470 GNUNET_break (0);
485 reconnect (ic->h); 471 reconnect (ic->h);
486 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK) 472 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK)
487 GNUNET_SCHEDULER_cancel (ic->timeout_task); 473 GNUNET_SCHEDULER_cancel (ic->timeout_task);
488 if (ic->callback != NULL) 474 if (ic->callback != NULL)
489 ic->callback (ic->callback_cls, NULL, NULL, err_msg); 475 ic->callback (ic->callback_cls, NULL, NULL,
490 GNUNET_free (err_msg); 476 _("Received invalid message from `PEERINFO' service.\n"));
491 GNUNET_free (ic); 477 GNUNET_free (ic);
492 return; 478 return;
493 } 479 }
@@ -499,18 +485,14 @@ peerinfo_handler (void *cls,
499 hello = (const struct GNUNET_HELLO_Message *) &im[1]; 485 hello = (const struct GNUNET_HELLO_Message *) &im[1];
500 if (ms != sizeof (struct InfoMessage) + GNUNET_HELLO_size (hello)) 486 if (ms != sizeof (struct InfoMessage) + GNUNET_HELLO_size (hello))
501 { 487 {
502 char * err_msg;
503 GNUNET_asprintf (&err_msg,
504 _("Received invalid message from `%s' service.\n"),
505 "PEERINFO");
506 GNUNET_break (0); 488 GNUNET_break (0);
507 reconnect (ic->h); 489 reconnect (ic->h);
508 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK) 490 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK)
509 GNUNET_SCHEDULER_cancel (ic->timeout_task); 491 GNUNET_SCHEDULER_cancel (ic->timeout_task);
510 if (ic->callback != NULL) 492 if (ic->callback != NULL)
511 ic->callback (ic->callback_cls, NULL, NULL, err_msg); 493 ic->callback (ic->callback_cls, NULL, NULL,
494 _("Received invalid message from `PEERINFO' service.\n"));
512 GNUNET_free (ic); 495 GNUNET_free (ic);
513 GNUNET_free (err_msg);
514 return; 496 return;
515 } 497 }
516 } 498 }
@@ -547,9 +529,6 @@ iterator_start_receive (void *cls,
547 529
548 if (GNUNET_OK != transmit_success) 530 if (GNUNET_OK != transmit_success)
549 { 531 {
550 char * err_msg;
551 GNUNET_asprintf(&err_msg,_("Failed to transmit iteration request to `%s' service (%d).\n"),"PEERINFO",transmit_success);
552 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,err_msg);
553 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK) 532 if (ic->timeout_task != GNUNET_SCHEDULER_NO_TASK)
554 { 533 {
555 GNUNET_SCHEDULER_cancel (ic->timeout_task); 534 GNUNET_SCHEDULER_cancel (ic->timeout_task);
@@ -557,8 +536,8 @@ iterator_start_receive (void *cls,
557 } 536 }
558 reconnect (ic->h); 537 reconnect (ic->h);
559 if (ic->callback != NULL) 538 if (ic->callback != NULL)
560 ic->callback (ic->callback_cls, NULL, NULL, err_msg); 539 ic->callback (ic->callback_cls, NULL, NULL,
561 GNUNET_free (err_msg); 540 _("Failed to transmit iteration request to `PEERINFO' service\n"));
562 GNUNET_free (ic); 541 GNUNET_free (ic);
563 return; 542 return;
564 } 543 }
@@ -588,21 +567,19 @@ signal_timeout (void *cls,
588 const struct GNUNET_SCHEDULER_TaskContext *tc) 567 const struct GNUNET_SCHEDULER_TaskContext *tc)
589{ 568{
590 struct GNUNET_PEERINFO_IteratorContext *ic = cls; 569 struct GNUNET_PEERINFO_IteratorContext *ic = cls;
591 char * err_msg;
592
593 GNUNET_asprintf(&err_msg,_("Timeout transmitting iteration request to `%s' service.\n"),
594 "PEERINFO");
595 570
596 ic->timeout_task = GNUNET_SCHEDULER_NO_TASK; 571 ic->timeout_task = GNUNET_SCHEDULER_NO_TASK;
597 if (! ic->in_receive) 572 if (! ic->in_receive)
598 GNUNET_CONTAINER_DLL_remove (ic->h->tq_head, 573 GNUNET_CONTAINER_DLL_remove (ic->h->tq_head,
599 ic->h->tq_tail, 574 ic->h->tq_tail,
600 ic->tqe); 575 ic->tqe);
601 reconnect (ic->h); 576 else
602 ic->callback (ic->callback_cls, NULL, NULL, err_msg); 577 reconnect (ic->h);
578 ic->callback (ic->callback_cls,
579 NULL, NULL,
580 _("Timeout transmitting iteration request to `PEERINFO' service.\n"));
603 ic->callback = NULL; 581 ic->callback = NULL;
604 GNUNET_free_non_null (ic->tqe); 582 GNUNET_free_non_null (ic->tqe);
605 GNUNET_free (err_msg);
606 GNUNET_free (ic); 583 GNUNET_free (ic);
607} 584}
608 585
@@ -685,7 +662,6 @@ GNUNET_PEERINFO_iterate (struct GNUNET_PEERINFO_Handle *h,
685} 662}
686 663
687 664
688
689/** 665/**
690 * Cancel an iteration over peer information. 666 * Cancel an iteration over peer information.
691 * 667 *
@@ -700,7 +676,7 @@ GNUNET_PEERINFO_iterate_cancel (struct GNUNET_PEERINFO_IteratorContext *ic)
700 ic->timeout_task = GNUNET_SCHEDULER_NO_TASK; 676 ic->timeout_task = GNUNET_SCHEDULER_NO_TASK;
701 } 677 }
702 ic->callback = NULL; 678 ic->callback = NULL;
703 if (ic->in_receive) 679 if (GNUNET_YES == ic->in_receive)
704 return; /* need to finish processing */ 680 return; /* need to finish processing */
705 GNUNET_CONTAINER_DLL_remove (ic->h->tq_head, 681 GNUNET_CONTAINER_DLL_remove (ic->h->tq_head,
706 ic->h->tq_tail, 682 ic->h->tq_tail,