File 0540-Fall-back-to-default-locking-if-LockKind-is-not-read.patch of Package erlang

From 8332bff4ceebd08d103623f59f7761d8e9367f69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Magnus=20Fr=C3=B6berg?= <magnus@klarna.com>
Date: Wed, 28 Nov 2018 11:59:19 +0100
Subject: [PATCH 2/2] Fall back to default locking if LockKind is not read or
 write

---
 lib/mnesia/src/mnesia.erl | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/lib/mnesia/src/mnesia.erl b/lib/mnesia/src/mnesia.erl
index 89b7207483..77afb8250c 100644
--- a/lib/mnesia/src/mnesia.erl
+++ b/lib/mnesia/src/mnesia.erl
@@ -851,7 +851,7 @@ read(Tid, Ts, Tab, Key, LockKind)
                                 abort({bad_type, Tab, LockKind})
                         end
                 end,
-	    add_written(?ets_lookup(Store, Oid), Tab, ObjsFun);
+	    add_written(?ets_lookup(Store, Oid), Tab, ObjsFun, LockKind);
 	_Protocol ->
 	    dirty_read(Tab, Key)
     end;
@@ -1207,13 +1207,17 @@ add_previous(_Tid, Ts, _Type, Tab) ->
 %% The actual read from the table is not done if not needed due to local
 %% transaction context, and if so, no extra read lock is needed either.
 
-add_written([], _Tab, ObjsFun) ->
+add_written([], _Tab, ObjsFun, _LockKind) ->
     ObjsFun();  % standard normal fast case
-add_written(Written, Tab, ObjsFun) ->
+add_written(Written, Tab, ObjsFun, LockKind) ->
     case val({Tab, setorbag}) of
 	bag ->
 	    add_written_to_bag(Written, ObjsFun(), []);
+        _ when LockKind == read;
+               LockKind == write ->
+	    add_written_to_set(Written);
 	_   ->
+            _ = ObjsFun(),  % Fall back to request new lock and read from source
 	    add_written_to_set(Written)
     end.
 
-- 
2.16.4

openSUSE Build Service is sponsored by