Hi :)
I am seeing faulty pattern matching in Erlang apps compiled to R12B-3
with +native, on 64-bit. Applies to older versions as well
More specificially this happens in Mochiweb in mochiweb_http.erl:request/2
Here is the code:
request(Socket, Body) ->
case gen_tcp:recv(Socket, 0, ?IDLE_TIMEOUT) of
{ok, {http_request, Method, Path, Version}} ->
headers(Socket, {Method, Path, Version}, [], Body);
{error, {http_error, "\r\n"}} ->
request(Socket, Body);
{error, {http_error, "\n"}} ->
request(Socket, Body);
_Other ->
io:format("~nOther = ~p~n", [_Other]), %my debug line
gen_tcp:close(Socket),
exit(normal)
end.
I put debugline under the default condition, to see what the case was.
Oddly enough it gave me this output:
Other = {ok,{http_request,'GET',{abs_path,"/"},{1,1}}}
which is a perfect match for the first condition.
...And It matches up just fine, if not compiled with +native
I also tried replacing the {http_request,Method,Path,Version} pattern with
_Message, and that gave a successful a match. _Message contained the same as
Other (without the 'ok')
To reproduce: grab Mochiweb source code (r84 of this writing), append
+native to ERLC_FLAGS in support/include.mk. Execute
`scripts/new_mochiweb.erl foo` to get skeleton files, and append
+native to foo/support/include.mk. here as well.
make, and ./start-dev.sh
Regards,
Kris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20080808/5b28ded7/attachment.html>