File 0913-erts-Inform-all-async-s-when-closing-udp-sctp-socket.patch of Package erlang

From 2b578bd845a2a514137a2a1a4c7ee536f85e6239 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Thu, 14 May 2020 18:45:33 +0200
Subject: [PATCH 1/3] [erts] Inform all async(s) when closing udp/sctp socket

The UDP and SCTP sockets did not inform all (async) waiting
processes about socket close, basically leaving them hanging.

OTP-16654
---
 erts/emulator/drivers/common/inet_drv.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index 2ef452fa01..1ac6dc4a93 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -12246,14 +12246,15 @@ static void packet_inet_stop(ErlDrvData e)
        into "udp_descriptor*" or "inet_descriptor*":
     */
     udp_descriptor * udesc = (udp_descriptor*) e;
-    inet_descriptor* descr = INETP(udesc);
+    inet_descriptor* desc  = INETP(udesc);
     if (udesc->i_buf != NULL) {
 	release_buffer(udesc->i_buf);
 	udesc->i_buf = NULL;
     }
 
-    ASSERT(NO_SUBSCRIBERS(&(descr->empty_out_q_subs)));
-    inet_stop(descr);
+    ASSERT(NO_SUBSCRIBERS(&(desc->empty_out_q_subs)));
+    async_error_am_all(desc, am_closed);
+    inet_stop(desc);
 }
 
 static int packet_error(udp_descriptor* udesc, int err)
-- 
2.26.1

openSUSE Build Service is sponsored by