File 0301-eldap-Fix-race-at-socket-close.patch of Package erlang

From 48daac0a888f39601bb714bd4f4f78b69e224d69 Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Mon, 1 Oct 2018 15:24:49 +0200
Subject: [PATCH] eldap: Fix race at socket close

---
 lib/eldap/src/eldap.erl | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/lib/eldap/src/eldap.erl b/lib/eldap/src/eldap.erl
index 625309271b..5b4cbe5b98 100644
--- a/lib/eldap/src/eldap.erl
+++ b/lib/eldap/src/eldap.erl
@@ -957,10 +957,19 @@ do_modify_dn_0(Data, Entry, NewRDN, DelOldRDN, NewSup, Controls) ->
 do_unbind(Data) ->
     Req = "",
     log2(Data, "unbind request = ~p (has no reply)~n", [Req]),
-    send_request(Data#eldap.fd, Data, Data#eldap.id, {unbindRequest, Req}),
     case Data#eldap.using_tls of
-	true -> ssl:close(Data#eldap.fd);
-	false -> gen_tcp:close(Data#eldap.fd)
+	true ->
+            send_request(Data#eldap.fd, Data, Data#eldap.id, {unbindRequest, Req}),
+            ssl:close(Data#eldap.fd);
+	false ->
+            OldTrapExit = process_flag(trap_exit, true),
+            catch send_request(Data#eldap.fd, Data, Data#eldap.id, {unbindRequest, Req}),
+            catch gen_tcp:close(Data#eldap.fd),
+            receive
+                {'EXIT', _From, _Reason} -> ok
+            after 0 -> ok
+            end,
+            process_flag(trap_exit, OldTrapExit)
     end,
     {no_reply, Data#eldap{binddn = (#eldap{})#eldap.binddn,
 			  passwd = (#eldap{})#eldap.passwd,
-- 
2.16.4

openSUSE Build Service is sponsored by