Erlang gen_server cast bad return value
-
27-10-2019 - |
Question
I try to cast message to a gen_server:
gen_server:cast({global, ID}, {watchers}).
The handler is:
handle_cast({watchers}, State) ->
case State#table_state.watchers of
[] ->
{reply, no_watchers, State};
_ ->
{reply, State#table_state.watchers, State}
end;
But when I execute gen_server:cast
the gen_server terminates with error:
=ERROR REPORT==== 29-Apr-2011::18:26:07 ===
** Generic server 1 terminating
** Last message in was {'$gen_cast',{watchers}}
** When Server state == {table_state,1,"1",11,[]}
** Reason for termination ==
** {bad_return_value,{reply, no_watchers, {table_state,3,"3",11,[]}}}
Why do I get bad_return_value
?
Solution
You cannot reply using cast (see gen_server
documentation). That is the whole point of casting an asynchronous message instead of using call.
In your case you want to return a reply, so use gen_server:call/2
instead.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow