View Issue Details

IDProjectCategoryView StatusLast Update
0005278libmicrohttpdinternal event looppublic2018-11-06 18:46
Reportertexec Assigned ToChristian Grothoff Due Date
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Product Version0.9.59 
Target Version0.9.60Fixed in Version0.9.60 
Summary0005278: Long running connections are aborted due to incomplete logic change
DescriptionCommit d9b6e400 added fd_set es to thread_main_handle_connection in daemon.c. Later in the case MHD_EVENT_LOOP_INFO_BLOCK the socket is added to &es via add_tod_fd_set. Previously it was added to &rs.
Then in line 1621 (d9b6e400) the following code is left unchanged:

      num_ready = MHD_SYS_select_ (maxsock + 1,
                                       &rs,
                                       &ws,
                                       NULL,
                                       tvp);

In 1654 FD_ISSET(…, &es) is passed as force_close argument to call_handlers. As &es is not cleared by the select call it's still set and the connection is always closed.

In our experience this leads to a closed connection 1-5 seconds after we sent our last data. Due to this delay/timeout the issue may not have been detected previously.

Using &es as argument to SYS_select_ instead of NULL fixes the problem for us.
Additional Informationd9b6e400 was released with 0.9.53.

(Current master (48dd53c7eb, gnunet) does not build on macOS, as the definition of MHD_socket_create_listen_ in mhd_sockets.h seems to be wrong (the function is called with a socket descriptor, not a boolean argument))
TagsNo tags attached.
Attached Files
issue-select-master.diff (524 bytes)   
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 639add58..141c89d4 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -1937,7 +1937,7 @@ thread_main_handle_connection (void *data)
 	  num_ready = MHD_SYS_select_ (maxsock + 1,
                                        &rs,
                                        &ws,
-                                       NULL,
+                                       &es,
                                        tvp);
 	  if (num_ready < 0)
 	    {
issue-select-master.diff (524 bytes)   

Relationships

has duplicate 0005295 closedChristian Grothoff connection forcibly closed when response reader returns no data 

Activities

Christian Grothoff

2018-02-16 04:03

manager   ~0012860

Fixed in Git master as suggested.

Issue History

Date ModifiedUsernameFieldChange
2018-02-14 20:24texecNew Issue
2018-02-14 20:24texecFile Added: issue-select-master.diff
2018-02-16 04:03Christian GrothoffAssigned To => Christian Grothoff
2018-02-16 04:03Christian GrothoffStatusnew => resolved
2018-02-16 04:03Christian GrothoffResolutionopen => fixed
2018-02-16 04:03Christian GrothoffFixed in Version => 0.9.60
2018-02-16 04:03Christian GrothoffNote Added: 0012860
2018-02-16 04:03Christian GrothoffTarget Version => 0.9.60
2018-03-23 21:22Christian GrothoffRelationship addedhas duplicate 0005295
2018-11-06 18:46Christian GrothoffStatusresolved => closed
2024-01-21 12:24Christian GrothoffCategorylibmicrohttpd internal select => internal event loop