【发布时间】:2010-10-04 20:00:51
【问题描述】:
我有一个具有 gen_fsm 行为的模块。现在我通过在适当的状态/消息中返回标准 {stop, Reason, State} 来终止它。
它似乎正确终止,但在运行时被认为是错误。
这正常吗?有没有办法停止 fsm 进程而不会被视为错误?
【问题讨论】:
标签: erlang
我有一个具有 gen_fsm 行为的模块。现在我通过在适当的状态/消息中返回标准 {stop, Reason, State} 来终止它。
它似乎正确终止,但在运行时被认为是错误。
这正常吗?有没有办法停止 fsm 进程而不会被视为错误?
【问题讨论】:
标签: erlang
返回值是 {stop,Reason,StateData} 而不是 {stop,StateName,StateData}。
如果原因不是正常或关闭,则会生成错误报告。对于服务器的正常退出,请使用 normal,当服务器被其主管要求退出时使用 shutdown。
(现在编辑已添加错误详细信息。)
gen_fsm 正在呼叫client_fsm:terminate(normal, loggedin, {state,#Port<0.144>,12345,"Bob"})
导致 function_clause 异常(该函数存在,但没有子句可以与这些参数匹配)。如果您更改 client_fsm:terminate/3 以使调用成功,则错误应该消失。
【讨论】: