From dcc84363e0b93405b408bd693e69947dff0a45ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Wed, 5 May 2021 14:45:02 +0200 Subject: [PATCH] fixup! Use barriers for netmgr synchronization --- lib/isc/netmgr/tcp.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index b91d1c5a6c..4bf2905e2f 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -651,7 +651,15 @@ isc__nm_tcp_stoplistening(isc_nmsocket_t *sock) { INSIST(0); ISC_UNREACHABLE(); } - enqueue_stoplistening(sock); + + if (!isc__nm_in_netthread()) { + enqueue_stoplistening(sock); + } else if (!isc__nm_acquire_interlocked(sock->mgr)) { + enqueue_stoplistening(sock); + } else { + stop_tcp_parent(sock); + isc__nm_drop_interlocked(sock->mgr); + } } void @@ -669,7 +677,12 @@ isc__nm_async_tcpstop(isc__networker_t *worker, isc__netievent_t *ev0) { return; } - stop_tcp_parent(sock); + if (!isc__nm_acquire_interlocked(sock->mgr)) { + enqueue_stoplistening(sock); + } else { + stop_tcp_parent(sock); + isc__nm_drop_interlocked(sock->mgr); + } } void