From 8490cb6328da880119dbc1eb92d3b439a2c5f34a Mon Sep 17 00:00:00 2001 From: Bartlomiej Puzon Date: Mon, 18 Jun 2012 15:58:08 -0700 Subject: Add tests showing that trying to delete non-existing object may corrupt the table index In case of bag tables, trying to delete a non-existing object leads to the index becoming corrupt. This happens if the non-existing object we try to delete happens to share its key and index field value with a single existing object in the table. Result: The index entry corresponding to the existing object is removed. --- lib/mnesia/test/mnesia_dirty_access_test.erl | 3 +++ 1 file changed, 3 insertions(+) (limited to 'lib/mnesia/test/mnesia_dirty_access_test.erl') diff --git a/lib/mnesia/test/mnesia_dirty_access_test.erl b/lib/mnesia/test/mnesia_dirty_access_test.erl index abbdab48c0..a57adefbac 100644 --- a/lib/mnesia/test/mnesia_dirty_access_test.erl +++ b/lib/mnesia/test/mnesia_dirty_access_test.erl @@ -527,6 +527,9 @@ dirty_index_update_bag(Config, Storage) -> ?match(ok, mnesia:dirty_write(Rec1)), ?match([Rec1], mnesia:dirty_index_read(Tab, 2, ValPos)), + ?match(ok, mnesia:dirty_delete_object(Rec5)), + ?match([Rec1], mnesia:dirty_index_read(Tab, 2, ValPos)), + ?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec2) end)), R1 = mnesia:dirty_index_read(Tab, 2, ValPos), ?match([Rec1, Rec2], lists:sort(R1)), -- cgit v1.2.3