我有一个具有gen_fsm行为的模块。现在我通过在适当的状态/消息中返回标准{stop,Reason,State}来终止它。
它似乎正确终止,但在运行时被视为错误。
这是正常的吗?有没有办法在不将其视为错误的情况下停止fsm进程?
答案 0 :(得分:6)
返回值为{stop,Reason,StateData}而不是{stop,StateName,StateData}。
如果Reason不是正常或关闭,则会生成错误报告。对于正常退出服务器使用正常,当服务器被其主管要求退出时,将使用shutdown。
(现在编辑已添加错误详情。)
gen_fsm
正在调用client_fsm:terminate(normal, loggedin, {state,#Port<0.144>,12345,"Bob"})
导致function_clause异常(函数存在但没有子句可以与这些参数匹配)。如果您更改client_fsm:terminate/3
以使该调用成功,则错误应该消失。