diff --git a/src/incl_priv/mhd_sys_options.h b/src/incl_priv/mhd_sys_options.h index e88a6600..59fa2e8a 100644 --- a/src/incl_priv/mhd_sys_options.h +++ b/src/incl_priv/mhd_sys_options.h @@ -526,6 +526,11 @@ /* # define mhd_DEBUG_SUSPEND_RESUME 1 */ #endif +#ifndef mhd_DEBUG_CONN_ADD_CLOSE +/* Use debug-print for adding and closing of the connections */ +/* # define mhd_DEBUG_CONN_ADD_CLOSE 1 */ +#endif + #ifndef MHD_AUTH_DIGEST_DEF_TIMEOUT # define MHD_AUTH_DIGEST_DEF_TIMEOUT 90 #endif /* ! MHD_AUTH_DIGEST_DEF_TIMEOUT */ diff --git a/src/mhd2/daemon_add_conn.c b/src/mhd2/daemon_add_conn.c index 2bfc0647..f1d5d4b9 100644 --- a/src/mhd2/daemon_add_conn.c +++ b/src/mhd2/daemon_add_conn.c @@ -43,6 +43,9 @@ #include "sys_sockets_headers.h" #include "sys_ip_headers.h" +#ifdef mhd_DEBUG_CONN_ADD_CLOSE +# include +#endif /* mhd_DEBUG_CONN_ADD_CLOSE */ #include #ifdef MHD_SUPPORT_EPOLL # include @@ -280,6 +283,7 @@ new_connection_prepare_ (struct MHD_Daemon *restrict daemon, /** + * Internal (inner) function. * Finally insert the new connection to the list of connections * served by the daemon and start processing. * @remark To be called only from thread that process @@ -287,11 +291,12 @@ new_connection_prepare_ (struct MHD_Daemon *restrict daemon, * * @param daemon daemon that manages the connection * @param connection the newly created connection - * @return #MHD_YES on success, #MHD_NO on error + * @return #MHD_SC_OK on success, + * error code otherwise */ static enum MHD_StatusCode -new_connection_process_ (struct MHD_Daemon *restrict daemon, - struct MHD_Connection *restrict connection) +new_connection_process_inner (struct MHD_Daemon *restrict daemon, + struct MHD_Connection *restrict connection) { enum MHD_StatusCode res; mhd_assert (connection->daemon == daemon); @@ -437,6 +442,41 @@ new_connection_process_ (struct MHD_Daemon *restrict daemon, } +/** + * Finally insert the new connection to the list of connections + * served by the daemon and start processing. + * @remark To be called only from thread that process + * daemon's select()/poll()/etc. + * + * @param daemon daemon that manages the connection + * @param connection the newly created connection + * @return #MHD_SC_OK on success, + * error code otherwise + */ +static enum MHD_StatusCode +new_connection_process_ (struct MHD_Daemon *restrict daemon, + struct MHD_Connection *restrict connection) +{ + enum MHD_StatusCode res; + + res = new_connection_process_inner (daemon, + connection); +#ifdef mhd_DEBUG_CONN_ADD_CLOSE + if (MHD_SC_OK == res) + fprintf (stderr, + "&&& Added new connection, FD: %llu\n", + (unsigned long long) connection->sk.fd); + else + fprintf (stderr, + "&&& Failed add connection, FD: %llu -> %u\n", + (unsigned long long) connection->sk.fd, + (unsigned int) res); +#endif /* mhd_DEBUG_CONN_ADD_CLOSE */ + + return res; +} + + /** * The given client socket will be managed (and closed!) by MHD after * this call and must no longer be used directly by the application @@ -1061,6 +1101,11 @@ mhd_conn_close_final (struct MHD_Connection *restrict c) if (NULL != c->sk.addr.data) free (c->sk.addr.data); mhd_socket_close (c->sk.fd); +#ifdef mhd_DEBUG_CONN_ADD_CLOSE + fprintf (stderr, + "&&& Closed connection, FD: %llu\n", + (unsigned long long) c->sk.fd); +#endif /* mhd_DEBUG_CONN_ADD_CLOSE */ free (c); } diff --git a/src/mhd2/stream_funcs.c b/src/mhd2/stream_funcs.c index 8cdffe28..bf1772b3 100644 --- a/src/mhd2/stream_funcs.c +++ b/src/mhd2/stream_funcs.c @@ -31,6 +31,9 @@ #include "mhd_assert.h" #include "mhd_unreachable.h" +#ifdef mhd_DEBUG_CONN_ADD_CLOSE +# include +#endif /* mhd_DEBUG_CONN_ADD_CLOSE */ #include #include "extr_events_funcs.h" #ifdef MHD_SUPPORT_EPOLL @@ -1025,7 +1028,11 @@ MHD_INTERNAL MHD_FN_PAR_NONNULL_ (1) void mhd_conn_pre_clean (struct MHD_Connection *restrict c) { - // TODO: support suspended connections +#ifdef mhd_DEBUG_CONN_ADD_CLOSE + fprintf (stderr, + "&&& Closing connection, FD: %llu\n", + (unsigned long long) c->sk.fd); +#endif /* mhd_DEBUG_CONN_ADD_CLOSE */ mhd_assert (c->dbg.closing_started); mhd_assert (! c->dbg.pre_cleaned);