[erlang-questions] dialyzer is driving me nuts

Ulf Wiger ulf.wiger@REDACTED
Wed Oct 19 13:02:18 CEST 2011


On 19 Oct 2011, at 12:57, Jesper Louis Andersen wrote:

> On Wed, Oct 19, 2011 at 11:03, Tim Watson <watson.timothy@REDACTED> wrote:
>>> 
>>> The problem of the catch-all clause in gen_servers, etc. is a generic one.
>>> 
>> 
>> Do gen_servers really need a catch-all clause? Can't they just be left to
>> crash? I don't mean to be isolent, I'm just wondering.
> 
> You are right that you can skip a catch-all clause, but it will lead
> to crashes left and right as soon as a process gets sent something
> which is a little off. I tend to lace my catch-all clauses with an
> error_logger message so I know something bad was sent.

I tend to wrap gen_server:call() in order to raise the exception in the client:

call(Server, Req) ->
   case gen_server:call(Server, Req) of
      badarg ->
         erlang:error(badarg);
      Reply ->
         Reply
   end.

Then:

handle_call(_Unknown, _From, S) ->
   {reply, badarg, S}.

Obviously, the scheme can be extended to carry some more information for the client-side exception.

BR,
Ulf W

Ulf Wiger, CTO, Erlang Solutions, Ltd.
http://erlang-solutions.com






More information about the erlang-questions mailing list