Skip to content

Commit

Permalink
Fix dialyzer warning about gen_event callback init/1 in log_mf_h
Browse files Browse the repository at this point in the history
The warning is about log_mf_h having a different spec for gen_event
callback init/1 than defined in gen_event.erl. log_mf_h allows return
value {error,Reason}, while gen_even only specifies successful return
values.

This commit add {error,Reason} as a valid return value to the
gen_event callback, since this is handled by the code.
  • Loading branch information
sirihansen committed Nov 30, 2011
1 parent 2b36dd7 commit 466b964
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 9 deletions.
@@ -1,2 +1,2 @@

gen_event_incorrect_return.erl:16: The inferred return type of init/1 ('error') has nothing in common with {'ok',_} | {'ok',_,'hibernate'}, which is the expected return type for the callback of gen_event behaviour
gen_event_incorrect_return.erl:16: The inferred return type of init/1 ('error') has nothing in common with {'error',_} | {'ok',_} | {'ok',_,'hibernate'}, which is the expected return type for the callback of gen_event behaviour
17 changes: 10 additions & 7 deletions lib/stdlib/doc/src/gen_event.xml
Expand Up @@ -195,12 +195,13 @@ gen_event:stop -----> Module:terminate/2
handlers using the same callback module.</p>
<p><c>Args</c> is an arbitrary term which is passed as the argument
to <c>Module:init/1</c>.</p>
<p>If <c>Module:init/1</c> returns a correct value, the event
manager adds the event handler and this function returns
<p>If <c>Module:init/1</c> returns a correct value indicating
successful completion, the event manager adds the event
handler and this function returns
<c>ok</c>. If <c>Module:init/1</c> fails with <c>Reason</c> or
returns an unexpected value <c>Term</c>, the event handler is
returns <c>{error,Reason}</c>, the event handler is
ignored and this function returns <c>{'EXIT',Reason}</c> or
<c>Term</c>, respectively.</p>
<c>{error,Reason}</c>, respectively.</p>
</desc>
</func>
<func>
Expand Down Expand Up @@ -448,12 +449,13 @@ gen_event:stop -----> Module:terminate/2
</section>
<funcs>
<func>
<name>Module:init(InitArgs) -> {ok,State} | {ok,State,hibernate}</name>
<name>Module:init(InitArgs) -> {ok,State} | {ok,State,hibernate} | {error,Reason}</name>
<fsummary>Initialize an event handler.</fsummary>
<type>
<v>InitArgs = Args | {Args,Term}</v>
<v>&nbsp;Args = Term = term()</v>
<v>State = term()</v>
<v>Reason = term()</v>
</type>
<desc>
<p>Whenever a new event handler is added to an event manager,
Expand All @@ -470,8 +472,9 @@ gen_event:stop -----> Module:terminate/2
the argument provided in the function call/return tuple and
<c>Term</c> is the result of terminating the old event handler,
see <c>gen_event:swap_handler/3</c>.</p>
<p>The function should return <c>{ok,State}</c> or <c>{ok,State, hibernate}</c>
where <c>State</c> is the initial internal state of the event handler.</p>
<p>If successful, the function should return <c>{ok,State}</c>
or <c>{ok,State,hibernate}</c> where <c>State</c> is the
initial internal state of the event handler.</p>
<p>If <c>{ok,State,hibernate}</c> is returned, the event
manager will go into hibernation (by calling <seealso
marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>),
Expand Down
3 changes: 2 additions & 1 deletion lib/stdlib/src/gen_event.erl
Expand Up @@ -70,7 +70,8 @@

-callback init(InitArgs :: term()) ->
{ok, State :: term()} |
{ok, State :: term(), hibernate}.
{ok, State :: term(), hibernate} |
{error, Reason :: term()}.
-callback handle_event(Event :: term(), State :: term()) ->
{ok, NewState :: term()} |
{ok, NewState :: term(), hibernate} |
Expand Down

0 comments on commit 466b964

Please sign in to comment.