aboutsummaryrefslogtreecommitdiff
path: root/src/rps
diff options
context:
space:
mode:
Diffstat (limited to 'src/rps')
-rw-r--r--src/rps/rps_api.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/rps/rps_api.c b/src/rps/rps_api.c
index 34b28cd6a..5c68e4337 100644
--- a/src/rps/rps_api.c
+++ b/src/rps/rps_api.c
@@ -434,12 +434,18 @@ void
434GNUNET_RPS_stream_cancel (struct GNUNET_RPS_StreamRequestHandle *srh) 434GNUNET_RPS_stream_cancel (struct GNUNET_RPS_StreamRequestHandle *srh)
435{ 435{
436 struct GNUNET_RPS_Handle *rps_handle; 436 struct GNUNET_RPS_Handle *rps_handle;
437 struct GNUNET_RPS_StreamRequestHandle *srh_iter;
437 438
438 rps_handle = srh->rps_handle; 439 rps_handle = srh->rps_handle;
439 GNUNET_CONTAINER_DLL_remove (rps_handle->stream_requests_head, 440 srh_iter = rps_handle->stream_requests_head;
440 rps_handle->stream_requests_tail, 441 while (NULL != srh_iter && srh_iter != srh) srh_iter = srh_iter->next;
441 srh); 442 if (NULL != srh_iter)
442 GNUNET_free (srh); 443 {
444 GNUNET_CONTAINER_DLL_remove (rps_handle->stream_requests_head,
445 rps_handle->stream_requests_tail,
446 srh);
447 GNUNET_free (srh);
448 }
443 if (NULL == rps_handle->stream_requests_head) cancel_stream (rps_handle); 449 if (NULL == rps_handle->stream_requests_head) cancel_stream (rps_handle);
444} 450}
445 451
@@ -542,6 +548,9 @@ handle_stream_input (void *cls,
542 NULL != srh_iter; 548 NULL != srh_iter;
543 srh_iter = srh_iter->next) 549 srh_iter = srh_iter->next)
544 { 550 {
551 GNUNET_CONTAINER_DLL_remove (srh_head_tmp,
552 srh_tail_tmp,
553 srh_iter);
545 GNUNET_CONTAINER_DLL_insert (h->stream_requests_head, 554 GNUNET_CONTAINER_DLL_insert (h->stream_requests_head,
546 h->stream_requests_tail, 555 h->stream_requests_tail,
547 srh_iter); 556 srh_iter);
@@ -928,17 +937,27 @@ GNUNET_RPS_request_cancel (struct GNUNET_RPS_Request_Handle *rh)
928void 937void
929GNUNET_RPS_disconnect (struct GNUNET_RPS_Handle *h) 938GNUNET_RPS_disconnect (struct GNUNET_RPS_Handle *h)
930{ 939{
931 GNUNET_MQ_destroy (h->mq);
932 if (NULL != h->stream_requests_head) 940 if (NULL != h->stream_requests_head)
933 { 941 {
942 struct GNUNET_RPS_StreamRequestHandle *srh_iter;
943
934 LOG (GNUNET_ERROR_TYPE_WARNING, 944 LOG (GNUNET_ERROR_TYPE_WARNING,
935 "Still waiting for replies\n"); 945 "Still waiting for replies\n");
946 srh_iter = h->stream_requests_head;
947 while (NULL != srh_iter)
948 {
949 struct GNUNET_RPS_StreamRequestHandle *srh_tmp = srh_iter;
950 srh_iter = srh_iter->next;
951 GNUNET_RPS_stream_cancel (srh_tmp);
952 }
936 } 953 }
937 if (NULL != h->view_update_cb) 954 if (NULL != h->view_update_cb)
938 { 955 {
939 LOG (GNUNET_ERROR_TYPE_WARNING, 956 LOG (GNUNET_ERROR_TYPE_WARNING,
940 "Still waiting for view updates\n"); 957 "Still waiting for view updates\n");
958 GNUNET_RPS_view_request_cancel (h);
941 } 959 }
960 GNUNET_MQ_destroy (h->mq);
942 GNUNET_free (h); 961 GNUNET_free (h);
943} 962}
944 963