diff options
author | Dan Gudmundsson <[email protected]> | 2018-08-13 16:28:44 +0200 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2018-08-13 16:28:44 +0200 |
commit | b0a453f9f950df868ea8913e9c81a1faca6a020f (patch) | |
tree | 0fd09b5ec216f2260ff78188b8868b8e65ee8ba8 /lib/mnesia | |
parent | 481c68c498bf28653ce35dd9289e8a4181aa9002 (diff) | |
parent | 4fc61aa178faa80290356a63d8e38d93697b9669 (diff) | |
download | otp-b0a453f9f950df868ea8913e9c81a1faca6a020f.tar.gz otp-b0a453f9f950df868ea8913e9c81a1faca6a020f.tar.bz2 otp-b0a453f9f950df868ea8913e9c81a1faca6a020f.zip |
Merge branch 'maint'
* maint:
Fix delete_object and write convergence in transaction.
Replace for loop with strchr
Fix typos
Clean unused wxe_driver callbacks
Remove wx c_src compilation warning on Darwin
Diffstat (limited to 'lib/mnesia')
-rw-r--r-- | lib/mnesia/src/mnesia.erl | 16 | ||||
-rw-r--r-- | lib/mnesia/test/mnesia_isolation_test.erl | 11 |
2 files changed, 20 insertions, 7 deletions
diff --git a/lib/mnesia/src/mnesia.erl b/lib/mnesia/src/mnesia.erl index 62202401ed..223dba3f90 100644 --- a/lib/mnesia/src/mnesia.erl +++ b/lib/mnesia/src/mnesia.erl @@ -783,12 +783,16 @@ do_delete_object(Tid, Ts, Tab, Val, LockKind) -> ?ets_insert(Store, {Oid, Val, delete_object}); _ -> case ?ets_match_object(Store, {Oid, '_', write}) of - [] -> - ?ets_match_delete(Store, {Oid, Val, '_'}), - ?ets_insert(Store, {Oid, Val, delete_object}); - _ -> - ?ets_delete(Store, Oid), - ?ets_insert(Store, {Oid, Oid, delete}) + [] -> + ?ets_match_delete(Store, {Oid, Val, '_'}), + ?ets_insert(Store, {Oid, Val, delete_object}); + Ops -> + case lists:member({Oid, Val, write}, Ops) of + true -> + ?ets_delete(Store, Oid), + ?ets_insert(Store, {Oid, Oid, delete}); + false -> ok + end end end, ok; diff --git a/lib/mnesia/test/mnesia_isolation_test.erl b/lib/mnesia/test/mnesia_isolation_test.erl index b2eea2390b..49bcec14af 100644 --- a/lib/mnesia/test/mnesia_isolation_test.erl +++ b/lib/mnesia/test/mnesia_isolation_test.erl @@ -1563,7 +1563,8 @@ trans_update_visible_inside_trans(Config) when is_list(Config) -> ?match({atomic, ok}, mnesia:create_table([{name, Tab}, {ram_copies, [Node1]}])), ValPos = 3, - RecA = {Tab, a, 1}, + RecA = {Tab, a, 1}, + RecA2 = {Tab, a, 2}, PatA = {Tab, '$1', 1}, RecB = {Tab, b, 3}, PatB = {Tab, '$1', 3}, @@ -1598,6 +1599,14 @@ trans_update_visible_inside_trans(Config) when is_list(Config) -> ?match([], mnesia:index_read(Tab, 3, ValPos)), %% delete_object + ?match(ok, mnesia:delete_object(RecA2)), + ?match([RecA], mnesia:read({Tab, a})), + ?match([RecA], mnesia:wread({Tab, a})), + ?match([RecA], mnesia:match_object(PatA)), + ?match([a], mnesia:all_keys(Tab)), + ?match([RecA], mnesia:index_match_object(PatA, ValPos)), + ?match([RecA], mnesia:index_read(Tab, 1, ValPos)), + ?match(ok, mnesia:delete_object(RecA)), ?match([], mnesia:read({Tab, a})), ?match([], mnesia:wread({Tab, a})), |