diff options
author | Dan Gudmundsson <[email protected]> | 2014-11-12 14:44:44 +0100 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2014-11-12 14:51:21 +0100 |
commit | dff52d0b26869caab886c82f71f0b11cbcdd33b1 (patch) | |
tree | f837ff1116837cd7be682ecbb890a8e3facfcdfa /lib/mnesia/src/mnesia.erl | |
parent | b3741f2b8e2ed9f370abb029160d1817497436e1 (diff) | |
download | otp-dff52d0b26869caab886c82f71f0b11cbcdd33b1.tar.gz otp-dff52d0b26869caab886c82f71f0b11cbcdd33b1.tar.bz2 otp-dff52d0b26869caab886c82f71f0b11cbcdd33b1.zip |
mnesia: Fix match_object bug
match_object returned wrong objects when matching on non key fields
and updates in the same transaction had been performed.
Diffstat (limited to 'lib/mnesia/src/mnesia.erl')
-rw-r--r-- | lib/mnesia/src/mnesia.erl | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/mnesia/src/mnesia.erl b/lib/mnesia/src/mnesia.erl index b7d80c1370..8f14831ad3 100644 --- a/lib/mnesia/src/mnesia.erl +++ b/lib/mnesia/src/mnesia.erl @@ -1140,10 +1140,12 @@ match_object(_Tid, _Ts, Tab, Pat, _LockKind) -> add_written_match(S, Pat, Tab, Objs) -> Ops = find_ops(S, Tab, Pat), - add_match(Ops, Objs, val({Tab, setorbag})). + FixedRes = add_match(Ops, Objs, val({Tab, setorbag})), + MS = ets:match_spec_compile([{Pat, [], ['$_']}]), + ets:match_spec_run(FixedRes, MS). find_ops(S, Tab, Pat) -> - GetWritten = [{{{Tab, '_'}, Pat, write}, [], ['$_']}, + GetWritten = [{{{Tab, '_'}, '_', write}, [], ['$_']}, {{{Tab, '_'}, '_', delete}, [], ['$_']}, {{{Tab, '_'}, Pat, delete_object}, [], ['$_']}], ets:select(S, GetWritten). |