From 81f5d3c6268ff91ee9c36c4cb34f6f9bfd54740d Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Thu, 12 Dec 2024 17:55:48 -0800 Subject: streams: add explicit stop functions This allows us to explicitly stop streams, dialers, and listeners, before we start tearing down things. This hopefully will be useful in resolving use-after-free bugs in http, tls, and websockets. The new functions are not yet documented, but they are nng_stream_stop, nng_stream_dialer_stop, and nng_stream_listener_stop. They should be called after close, and before free. The close functions now close without blocking, but the stop function is allowed to block. --- demo/stream/stream.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'demo') diff --git a/demo/stream/stream.c b/demo/stream/stream.c index c6cc9b23..5a4995e6 100644 --- a/demo/stream/stream.c +++ b/demo/stream/stream.c @@ -55,7 +55,7 @@ int client(const char *url) { nng_stream_dialer *dialer; - nng_aio * aio; + nng_aio *aio; nng_iov iov; int rv; @@ -102,6 +102,11 @@ client(const char *url) // Send ELCOSE to send/recv associated wit this stream free(iov.iov_buf); + + // stop everything before freeing + nng_stream_stop(c1); + nng_stream_dialer_stop(dialer); + nng_stream_free(c1); nng_aio_free(aio); nng_stream_dialer_free(dialer); -- cgit v1.2.3-70-g09d2