diff options
Diffstat (limited to 'src/transport/plugin_transport_http_server.c')
-rw-r--r-- | src/transport/plugin_transport_http_server.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/transport/plugin_transport_http_server.c b/src/transport/plugin_transport_http_server.c index ff2d68602..e3d5e9a01 100644 --- a/src/transport/plugin_transport_http_server.c +++ b/src/transport/plugin_transport_http_server.c | |||
@@ -92,6 +92,11 @@ struct ServerRequest | |||
92 | */ | 92 | */ |
93 | int connected; | 93 | int connected; |
94 | 94 | ||
95 | /** | ||
96 | * Currently suspended | ||
97 | */ | ||
98 | bool suspended; | ||
99 | |||
95 | }; | 100 | }; |
96 | 101 | ||
97 | 102 | ||
@@ -501,7 +506,9 @@ server_wake_up (void *cls) | |||
501 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 506 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
502 | "Session %p: Waking up PUT handle\n", | 507 | "Session %p: Waking up PUT handle\n", |
503 | s); | 508 | s); |
509 | GNUNET_assert (s->server_recv->suspended); | ||
504 | MHD_resume_connection (s->server_recv->mhd_conn); | 510 | MHD_resume_connection (s->server_recv->mhd_conn); |
511 | s->server_recv->suspended = false; | ||
505 | } | 512 | } |
506 | 513 | ||
507 | 514 | ||
@@ -541,7 +548,11 @@ server_delete_session (struct GNUNET_ATS_Session *s) | |||
541 | GNUNET_SCHEDULER_cancel (s->recv_wakeup_task); | 548 | GNUNET_SCHEDULER_cancel (s->recv_wakeup_task); |
542 | s->recv_wakeup_task = NULL; | 549 | s->recv_wakeup_task = NULL; |
543 | if (NULL != s->server_recv) | 550 | if (NULL != s->server_recv) |
551 | { | ||
552 | GNUNET_assert (s->server_recv->suspended); | ||
544 | MHD_resume_connection (s->server_recv->mhd_conn); | 553 | MHD_resume_connection (s->server_recv->mhd_conn); |
554 | s->server_recv->suspended = false; | ||
555 | } | ||
545 | } | 556 | } |
546 | GNUNET_assert (GNUNET_OK == | 557 | GNUNET_assert (GNUNET_OK == |
547 | GNUNET_CONTAINER_multipeermap_remove (plugin->sessions, | 558 | GNUNET_CONTAINER_multipeermap_remove (plugin->sessions, |
@@ -760,9 +771,16 @@ http_server_plugin_send (void *cls, | |||
760 | GNUNET_free (stat_txt); | 771 | GNUNET_free (stat_txt); |
761 | 772 | ||
762 | if (NULL != session->server_send) | 773 | if (NULL != session->server_send) |
774 | { | ||
775 | if (session->server_send->suspended) | ||
776 | { | ||
777 | MHD_resume_connection (session->server_send->mhd_conn); | ||
778 | session->server_send->suspended = false; | ||
779 | } | ||
763 | server_reschedule (session->plugin, | 780 | server_reschedule (session->plugin, |
764 | session->server_send->mhd_daemon, | 781 | session->server_send->mhd_daemon, |
765 | GNUNET_YES); | 782 | GNUNET_YES); |
783 | } | ||
766 | return bytes_sent; | 784 | return bytes_sent; |
767 | } | 785 | } |
768 | 786 | ||
@@ -1613,6 +1631,12 @@ server_send_callback (void *cls, | |||
1613 | s); | 1631 | s); |
1614 | return MHD_CONTENT_READER_END_OF_STREAM; | 1632 | return MHD_CONTENT_READER_END_OF_STREAM; |
1615 | } | 1633 | } |
1634 | else | ||
1635 | { | ||
1636 | MHD_suspend_connection (s->server_send->mhd_conn); | ||
1637 | s->server_send->suspended = true; | ||
1638 | return 0; | ||
1639 | } | ||
1616 | return bytes_read; | 1640 | return bytes_read; |
1617 | } | 1641 | } |
1618 | 1642 | ||
@@ -1868,6 +1892,7 @@ server_access_cb (void *cls, | |||
1868 | GNUNET_YES)); | 1892 | GNUNET_YES)); |
1869 | GNUNET_assert(s->server_recv->mhd_conn == mhd_connection); | 1893 | GNUNET_assert(s->server_recv->mhd_conn == mhd_connection); |
1870 | MHD_suspend_connection (s->server_recv->mhd_conn); | 1894 | MHD_suspend_connection (s->server_recv->mhd_conn); |
1895 | s->server_recv->suspended = true; | ||
1871 | if (NULL == s->recv_wakeup_task) | 1896 | if (NULL == s->recv_wakeup_task) |
1872 | s->recv_wakeup_task | 1897 | s->recv_wakeup_task |
1873 | = GNUNET_SCHEDULER_add_delayed (delay, | 1898 | = GNUNET_SCHEDULER_add_delayed (delay, |