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. --- include/nng/nng.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include') diff --git a/include/nng/nng.h b/include/nng/nng.h index 0ce5f46c..d087805d 100644 --- a/include/nng/nng.h +++ b/include/nng/nng.h @@ -1137,6 +1137,7 @@ typedef struct nng_stream_listener nng_stream_listener; NNG_DECL void nng_stream_free(nng_stream *); NNG_DECL void nng_stream_close(nng_stream *); +NNG_DECL void nng_stream_stop(nng_stream *); NNG_DECL void nng_stream_send(nng_stream *, nng_aio *); NNG_DECL void nng_stream_recv(nng_stream *, nng_aio *); NNG_DECL int nng_stream_get_bool(nng_stream *, const char *, bool *); @@ -1152,6 +1153,7 @@ NNG_DECL int nng_stream_dialer_alloc_url( nng_stream_dialer **, const nng_url *); NNG_DECL void nng_stream_dialer_free(nng_stream_dialer *); NNG_DECL void nng_stream_dialer_close(nng_stream_dialer *); +NNG_DECL void nng_stream_dialer_stop(nng_stream_dialer *); NNG_DECL void nng_stream_dialer_dial(nng_stream_dialer *, nng_aio *); NNG_DECL int nng_stream_dialer_get_bool( nng_stream_dialer *, const char *, bool *); @@ -1193,6 +1195,7 @@ NNG_DECL int nng_stream_listener_alloc_url( nng_stream_listener **, const nng_url *); NNG_DECL void nng_stream_listener_free(nng_stream_listener *); NNG_DECL void nng_stream_listener_close(nng_stream_listener *); +NNG_DECL void nng_stream_listener_stop(nng_stream_listener *); NNG_DECL int nng_stream_listener_listen(nng_stream_listener *); NNG_DECL void nng_stream_listener_accept(nng_stream_listener *, nng_aio *); NNG_DECL int nng_stream_listener_get_bool( -- cgit v1.2.3-70-g09d2