From 6ba2b5402c3dea5b765034436ae9e6b3ca4e2ce5 Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson
Date: Wed, 27 Aug 2014 09:00:14 +0200
Subject: Avoid timing issue in schema transaction when node is stopping
By doing an abort, the create_table can be restarted
if a node go down during the transaction.
{badarg,
[{erlang,link,[undefined],[]},
{mnesia_controller,
wait_for_schema_commit_lock,0,
[{file,"mnesia_controller.erl"},
{line,303}]},
{mnesia_schema,prepare_commit,3,
[{file,"mnesia_schema.erl"},
{line,1838}]},
{mnesia_tm,commit_participant,6,
[{file,"mnesia_tm.erl"},
{line,1669}]}]}}},
---
lib/mnesia/src/mnesia_controller.erl | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
(limited to 'lib/mnesia')
diff --git a/lib/mnesia/src/mnesia_controller.erl b/lib/mnesia/src/mnesia_controller.erl
index fe2fd67d71..5a9bae54da 100644
--- a/lib/mnesia/src/mnesia_controller.erl
+++ b/lib/mnesia/src/mnesia_controller.erl
@@ -300,8 +300,13 @@ mnesia_down(Node) ->
end.
wait_for_schema_commit_lock() ->
- link(whereis(?SERVER_NAME)),
- unsafe_call(wait_for_schema_commit_lock).
+ try
+ Pid = whereis(?SERVER_NAME),
+ link(Pid), %% Keep the link until release_schema_commit_lock
+ gen_server:call(Pid, wait_for_schema_commit_lock, infinity)
+ catch _:_ ->
+ mnesia:abort({node_not_running, node()})
+ end.
block_controller() ->
call(block_controller).
@@ -557,12 +562,6 @@ cast(Msg) ->
abcast(Nodes, Msg) ->
gen_server:abcast(Nodes, ?SERVER_NAME, Msg).
-unsafe_call(Msg) ->
- case whereis(?SERVER_NAME) of
- undefined -> {error, {node_not_running, node()}};
- Pid -> gen_server:call(Pid, Msg, infinity)
- end.
-
call(Msg) ->
case whereis(?SERVER_NAME) of
undefined ->
--
cgit v1.2.3
From cf22dd093ea92b396884e46e10e62b26793655ac Mon Sep 17 00:00:00 2001
From: Erlang/OTP
Date: Fri, 29 Aug 2014 09:34:44 +0200
Subject: Prepare release
---
lib/mnesia/doc/src/notes.xml | 18 +++++++++++++++++-
lib/mnesia/vsn.mk | 2 +-
2 files changed, 18 insertions(+), 2 deletions(-)
(limited to 'lib/mnesia')
diff --git a/lib/mnesia/doc/src/notes.xml b/lib/mnesia/doc/src/notes.xml
index 08212dfede..df2c27afba 100644
--- a/lib/mnesia/doc/src/notes.xml
+++ b/lib/mnesia/doc/src/notes.xml
@@ -38,7 +38,23 @@
thus constitutes one section in this document. The title of each
section is the version number of Mnesia.
- Mnesia 4.12.1
+ Mnesia 4.12.2
+
+ Fixed Bugs and Malfunctions
+
+ -
+
+ Fixed a race which could make create_table fail if a node
+ was going down during the transaction.
+
+ Own Id: OTP-12124 Aux Id: seq12694
+
+
+
+
+
+
+Mnesia 4.12.1
Fixed Bugs and Malfunctions
diff --git a/lib/mnesia/vsn.mk b/lib/mnesia/vsn.mk
index 173c46898b..d16d501103 100644
--- a/lib/mnesia/vsn.mk
+++ b/lib/mnesia/vsn.mk
@@ -1 +1 @@
-MNESIA_VSN = 4.12.1
+MNESIA_VSN = 4.12.2
--
cgit v1.2.3