【发布时间】:2011-03-29 11:53:22
【问题描述】:
我遇到了一个问题,我无法在我的程序中停止 mnesia 而不会导致应用程序挂起。
我目前正在我的 erlang 应用程序中进行 mnesia 的原型设计。
在我的 jaus_app.erl 文件中 start() 调用:
{atomic, ok} = mnesia:load_textfile("priv/mnesia_prototype.txt")
我的 stop() 函数调用:
mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"),
mnesia:stop(),
当我注释掉这些行并从 erlang 提示符启动和停止 mnesia 时,我能够干净地停止我的应用程序。
我不应该在完全成熟的 erlang 应用程序中使用这些原型函数吗?
肯。
【问题讨论】:
-
发生这种情况是因为您的
stop函数是从应用程序控制器调用的,这是一个gen_server,但mnesia:stop调用application:stop(mnesia)并等待来自应用程序控制器的响应 - 而您陷入僵局。所以,简单的答案是“不要在那个回调函数中使用mnesia:stop”;不过,我没有更好的建议:)