aboutsummaryrefslogtreecommitdiff
path: root/src/stream
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-10-02 12:16:27 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-10-02 12:16:27 +0000
commit79d6a55f151f2913a48942c5d3ad5a1cde2f4ce8 (patch)
treedb03621626c2ffc4d43911d76e99b56e1b8c87ed /src/stream
parent74f4e694741af471588b1172fe7f14f21982e23d (diff)
downloadgnunet-79d6a55f151f2913a48942c5d3ad5a1cde2f4ce8.tar.gz
gnunet-79d6a55f151f2913a48942c5d3ad5a1cde2f4ce8.zip
fixing #2574
Diffstat (limited to 'src/stream')
-rw-r--r--src/stream/perf_stream_api.c14
-rw-r--r--src/stream/stream_api.c45
2 files changed, 36 insertions, 23 deletions
diff --git a/src/stream/perf_stream_api.c b/src/stream/perf_stream_api.c
index e7e37792a..9539415f4 100644
--- a/src/stream/perf_stream_api.c
+++ b/src/stream/perf_stream_api.c
@@ -438,7 +438,12 @@ write_completion (void *cls, enum GNUNET_STREAM_Status status, size_t size)
438 double throughput; 438 double throughput;
439 double prof_time_sec; 439 double prof_time_sec;
440 440
441 GNUNET_assert (GNUNET_STREAM_OK == status); 441 if (GNUNET_STREAM_OK != status)
442 {
443 GNUNET_SCHEDULER_cancel (abort_task);
444 abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL);
445 return;
446 }
442 GNUNET_assert (size <= DATA_SIZE); 447 GNUNET_assert (size <= DATA_SIZE);
443 pdata->bytes_wrote += size; 448 pdata->bytes_wrote += size;
444 for (;size > 0; size--) 449 for (;size > 0; size--)
@@ -537,7 +542,12 @@ input_processor (void *cls, enum GNUNET_STREAM_Status status,
537{ 542{
538 struct PeerData *pdata = cls; 543 struct PeerData *pdata = cls;
539 544
540 GNUNET_assert (GNUNET_STREAM_OK == status); 545 if (GNUNET_STREAM_OK != status)
546 {
547 GNUNET_SCHEDULER_cancel (abort_task);
548 abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL);
549 return 0;
550 }
541 GNUNET_assert (size < DATA_SIZE); 551 GNUNET_assert (size < DATA_SIZE);
542 GNUNET_assert (0 == memcmp (((void *)data ) + pdata->bytes_read, 552 GNUNET_assert (0 == memcmp (((void *)data ) + pdata->bytes_read,
543 input_data, size)); 553 input_data, size));
diff --git a/src/stream/stream_api.c b/src/stream/stream_api.c
index 70459ee3f..0d10cf352 100644
--- a/src/stream/stream_api.c
+++ b/src/stream/stream_api.c
@@ -675,13 +675,13 @@ queue_message (struct GNUNET_STREAM_Socket *socket,
675 { 675 {
676 socket->retries = 0; 676 socket->retries = 0;
677 socket->transmit_handle = 677 socket->transmit_handle =
678 GNUNET_MESH_notify_transmit_ready (socket->tunnel, 678 GNUNET_MESH_notify_transmit_ready (socket->tunnel,
679 GNUNET_NO, /* Corking */ 679 GNUNET_NO, /* Corking */
680 socket->retransmit_timeout, 680 socket->retransmit_timeout,
681 &socket->other_peer, 681 &socket->other_peer,
682 ntohs (message->header.size), 682 ntohs (message->header.size),
683 &send_message_notify, 683 &send_message_notify,
684 socket); 684 socket);
685 } 685 }
686} 686}
687 687
@@ -734,11 +734,11 @@ data_retransmission_task (void *cls,
734{ 734{
735 struct GNUNET_STREAM_Socket *socket = cls; 735 struct GNUNET_STREAM_Socket *socket = cls;
736 736
737 if (GNUNET_SCHEDULER_REASON_SHUTDOWN == tc->reason) 737 socket->data_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
738 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
738 return; 739 return;
739 LOG (GNUNET_ERROR_TYPE_DEBUG, 740 LOG (GNUNET_ERROR_TYPE_DEBUG,
740 "%s: Retransmitting DATA...\n", GNUNET_i2s (&socket->other_peer)); 741 "%s: Retransmitting DATA...\n", GNUNET_i2s (&socket->other_peer));
741 socket->data_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
742 write_data (socket); 742 write_data (socket);
743} 743}
744 744
@@ -756,11 +756,9 @@ ack_task (void *cls,
756 struct GNUNET_STREAM_Socket *socket = cls; 756 struct GNUNET_STREAM_Socket *socket = cls;
757 struct GNUNET_STREAM_AckMessage *ack_msg; 757 struct GNUNET_STREAM_AckMessage *ack_msg;
758 758
759 if (GNUNET_SCHEDULER_REASON_SHUTDOWN == tc->reason)
760 {
761 return;
762 }
763 socket->ack_task_id = GNUNET_SCHEDULER_NO_TASK; 759 socket->ack_task_id = GNUNET_SCHEDULER_NO_TASK;
760 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
761 return;
764 /* Create the ACK Message */ 762 /* Create the ACK Message */
765 ack_msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_AckMessage)); 763 ack_msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_AckMessage));
766 ack_msg->header.header.size = htons (sizeof (struct 764 ack_msg->header.header.size = htons (sizeof (struct
@@ -789,9 +787,11 @@ close_msg_retransmission_task (void *cls,
789 struct GNUNET_STREAM_MessageHeader *msg; 787 struct GNUNET_STREAM_MessageHeader *msg;
790 struct GNUNET_STREAM_Socket *socket; 788 struct GNUNET_STREAM_Socket *socket;
791 789
790 shutdown_handle->close_msg_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
792 GNUNET_assert (NULL != shutdown_handle); 791 GNUNET_assert (NULL != shutdown_handle);
792 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
793 return;
793 socket = shutdown_handle->socket; 794 socket = shutdown_handle->socket;
794
795 msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader)); 795 msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
796 msg->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader)); 796 msg->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader));
797 switch (shutdown_handle->operation) 797 switch (shutdown_handle->operation)
@@ -1044,6 +1044,8 @@ read_io_timeout (void *cls,
1044 void *proc_cls; 1044 void *proc_cls;
1045 1045
1046 socket->read_io_timeout_task_id = GNUNET_SCHEDULER_NO_TASK; 1046 socket->read_io_timeout_task_id = GNUNET_SCHEDULER_NO_TASK;
1047 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
1048 return;
1047 if (socket->read_task_id != GNUNET_SCHEDULER_NO_TASK) 1049 if (socket->read_task_id != GNUNET_SCHEDULER_NO_TASK)
1048 { 1050 {
1049 LOG (GNUNET_ERROR_TYPE_DEBUG, 1051 LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1462,9 +1464,9 @@ control_retransmission_task (void *cls,
1462{ 1464{
1463 struct GNUNET_STREAM_Socket *socket = cls; 1465 struct GNUNET_STREAM_Socket *socket = cls;
1464 1466
1467 socket->control_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
1465 if (GNUNET_SCHEDULER_REASON_SHUTDOWN == tc->reason) 1468 if (GNUNET_SCHEDULER_REASON_SHUTDOWN == tc->reason)
1466 return; 1469 return;
1467 socket->control_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
1468 LOG_DEBUG ("%s: Retransmitting a control message\n", 1470 LOG_DEBUG ("%s: Retransmitting a control message\n",
1469 GNUNET_i2s (&socket->other_peer)); 1471 GNUNET_i2s (&socket->other_peer));
1470 switch (socket->state) 1472 switch (socket->state)
@@ -2781,9 +2783,7 @@ tunnel_cleaner (void *cls,
2781 "%s: Peer %s has terminated connection abruptly\n", 2783 "%s: Peer %s has terminated connection abruptly\n",
2782 GNUNET_i2s (&socket->other_peer), 2784 GNUNET_i2s (&socket->other_peer),
2783 GNUNET_i2s (&socket->other_peer)); 2785 GNUNET_i2s (&socket->other_peer));
2784
2785 socket->status = GNUNET_STREAM_SHUTDOWN; 2786 socket->status = GNUNET_STREAM_SHUTDOWN;
2786
2787 /* Clear Transmit handles */ 2787 /* Clear Transmit handles */
2788 if (NULL != socket->transmit_handle) 2788 if (NULL != socket->transmit_handle)
2789 { 2789 {
@@ -3498,10 +3498,13 @@ GNUNET_STREAM_io_read_cancel (struct GNUNET_STREAM_IOReadHandle *ioh)
3498 GNUNET_assert (NULL != socket->read_handle); 3498 GNUNET_assert (NULL != socket->read_handle);
3499 GNUNET_assert (ioh == socket->read_handle); 3499 GNUNET_assert (ioh == socket->read_handle);
3500 /* Read io time task should be there; if it is already executed then this 3500 /* Read io time task should be there; if it is already executed then this
3501 read handle is not valid */ 3501 read handle is not valid; However upon scheduler shutdown the read io task
3502 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != socket->read_io_timeout_task_id); 3502 may be executed before */
3503 GNUNET_SCHEDULER_cancel (socket->read_io_timeout_task_id); 3503 if (GNUNET_SCHEDULER_NO_TASK != socket->read_io_timeout_task_id)
3504 socket->read_io_timeout_task_id = GNUNET_SCHEDULER_NO_TASK; 3504 {
3505 GNUNET_SCHEDULER_cancel (socket->read_io_timeout_task_id);
3506 socket->read_io_timeout_task_id = GNUNET_SCHEDULER_NO_TASK;
3507 }
3505 /* reading task may be present; if so we have to stop it */ 3508 /* reading task may be present; if so we have to stop it */
3506 if (GNUNET_SCHEDULER_NO_TASK != socket->read_task_id) 3509 if (GNUNET_SCHEDULER_NO_TASK != socket->read_task_id)
3507 { 3510 {