Изящно завершает работу сервера Erlang или FSM? - PullRequest
1 голос
/ 02 февраля 2009

У меня есть модуль с поведением gen_fsm. Прямо сейчас я прекращаю его, возвращая стандарт {останов, причина, состояние} в соответствующем состоянии / сообщении.

Кажется, что он завершается правильно, но считается ошибкой во время выполнения.

Это нормально? Есть ли способ остановить процесс fsm, не считая его ошибкой?

1 Ответ

6 голосов
/ 02 февраля 2009

Возвращаемое значение: {stop, Reason, StateData}, а не {stop, StateName, StateData}.

Отчет об ошибке генерируется, если причиной является что-то отличное от нормального или выключение. Для нормального выхода из вашего сервера используйте обычное, завершение работы используется, когда сервер запрашивает выход своего супервизора.

(Изменить сейчас, когда были добавлены подробности ошибки.)

gen_fsm звонит client_fsm:terminate(normal, loggedin, {state,#Port<0.144>,12345,"Bob"})

, что приводит к исключению function_clause (функция существует, но никакие предложения не могут быть сопоставлены с этими аргументами). Если вы измените client_fsm:terminate/3, чтобы этот вызов был успешным, ошибка должна исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...