Bugs in Erlang code
Raimo Niskanen
raimo@REDACTED
Thu Mar 17 09:31:26 CET 2005
If the second argument to do_yield is corrected to 'infinity' it will
not return 'timeout', I would say that is not a bug, just mere ugly.
So the bug is that 'infinity' is misspelled as 'infinite' in two places.
alexey@REDACTED (Alexey Shchepin) writes:
> Hello, Kostis!
>
> On Thu, 17 Mar 2005 01:14:39 +0100 (MET), you said:
>
> KS> I am really amazed at some of the bugs we have been able to find in
> KS> supposedly well-tested Erlang code using the new type analysis.
>
> KS> Many of them, we've reported directly to the OTP team and they are already
> KS> fixed. Some others we've finding every day as the analysis gets stronger
> KS> and stronger. For example, today I've come across the following code (in
> KS> kernel/src/rpc.erl).
>
> KS> =======================================================================
> KS> yield(Key) when pid(Key) ->
> KS> {value, R} = do_yield(Key, infinite),
> KS> R.
>
> do_yield can return 'timeout', so there can be 'badmatch' error, and second
> argument should be 'infinity'.
>
> KS>
> KS> nb_yield(Key, infinite) when pid(Key) ->
> KS> do_yield(Key, infinite);
>
> Again 'infinity'.
>
> KS> nb_yield(Key, Timeout) when pid(Key), integer(Timeout), Timeout >= 0 ->
> KS> do_yield(Key, Timeout).
> KS>
> KS> nb_yield(Key) when pid(Key) ->
> KS> do_yield(Key, 0).
> KS>
> KS> do_yield(Key, Timeout) ->
> KS> receive
> KS> {Key,{promise_reply,R}} ->
> KS> {value,R}
> KS> after Timeout ->
> KS> timeout
> KS> end.
> KS> =========================================================================
>
> The rest looks ok for me.
>
> KS> There are actually two (and arguably three) errors in the above code!
>
> KS> Dialyzer found them.
>
> KS> QUIZ for the seasoned Erlang programmers: Who can spot them?
>
--
/ Raimo Niskanen, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list