[erlang-bugs] mnesia_loader:db_match_erase/2 can only badmatch with dets

Paul Mineiro <>
Sun Jul 20 23:23:17 CEST 2008


The return value of dets:match_delete/2 is an integer, or an error tuple;
mnesia_loader is matching against ok.

Attached is a suggested patch.

-- p

p.z. I wonder if the dialyzer would have found this ...
-------------- next part --------------
--- /Users/pmineiro/src/otp_src_R12B-2/lib/mnesia/src/mnesia_loader.erl.orig	2008-07-20 14:17:25.000000000 -0700
+++ mnesia_loader.erl	2008-07-20 14:20:24.000000000 -0700
@@ -620,7 +620,9 @@
 db_match_erase({disc_copies, Tab} , Pat) ->
     true = ?ets_match_delete(Tab, Pat);
 db_match_erase({disc_only_copies, Tab}, Pat) ->
-    ok = dets:match_delete(Tab, Pat).
+    case dets:match_delete(Tab, Pat) of
+      N when is_integer (N) -> true
+    end.
 
 db_put({ram_copies, Tab}, Val) ->
     true = ?ets_insert(Tab, Val);


More information about the erlang-bugs mailing list