diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-10-02 12:16:27 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-10-02 12:16:27 +0000 |
commit | 79d6a55f151f2913a48942c5d3ad5a1cde2f4ce8 (patch) | |
tree | db03621626c2ffc4d43911d76e99b56e1b8c87ed /src/stream | |
parent | 74f4e694741af471588b1172fe7f14f21982e23d (diff) | |
download | gnunet-79d6a55f151f2913a48942c5d3ad5a1cde2f4ce8.tar.gz gnunet-79d6a55f151f2913a48942c5d3ad5a1cde2f4ce8.zip |
fixing #2574
Diffstat (limited to 'src/stream')
-rw-r--r-- | src/stream/perf_stream_api.c | 14 | ||||
-rw-r--r-- | src/stream/stream_api.c | 45 |
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 | { |