commit 4627d005d2ead3a3b7f34b25b9e6528d2f9ed99b
parent a7c913850dd88d5ebb82e4b5013fdab1074dbaa8
Author: Christian Grothoff <christian@grothoff.org>
Date: Wed, 8 Feb 2023 14:28:42 +0100
add assertion to guard against bad behavior described in #7196, also document that after suspending one must return MHD_YES
Diffstat:
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/doc/libmicrohttpd.texi b/doc/libmicrohttpd.texi
@@ -3036,6 +3036,11 @@ The only safe time to suspend a connection is from the
response object must not be shared among multiple
connections).
+When suspending from the @code{MHD_AccessHandlerCallback}
+you MUST afterwards return @code{MHD_YES} from the access handler
+callback (as MHD_NO would imply to both close and suspend
+the connection, which is not allowed).
+
Finally, it is an API violation to call @code{MHD_stop_daemon} while
having suspended connections (this will at least create memory and
socket leaks or lead to undefined behavior). You must explicitly
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
@@ -868,6 +868,7 @@ MHD_connection_close_ (struct MHD_Connection *connection,
struct MHD_Daemon *daemon = connection->daemon;
struct MHD_Response *resp = connection->rp.response;
+ mhd_assert (! connection->suspended);
#ifdef MHD_USE_THREADS
mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
MHD_thread_ID_match_current_ (connection->pid) );