[erlang-bugs] Parameterized modules aren't correct treated by HiPE
Mikael Pettersson
mikpe@REDACTED
Fri Feb 13 23:34:51 CET 2009
Sergey S writes:
> Hello.
>
> While playing with parameterized modules, I found that they aren't
> completely supported by HiPE. It was expressed that my HiPE compiled
> server involving parameterized modules crashed, when I started it.
> Details are below.
>
> I know that parameterized modules we have in R12B5 is an experimental
> feature, but if it's going to be an official part of the language this
> bug report may be helpful to make it more stable than it is now.
>
> I've just written a sample to be used as a demonstration of this issue.
>
> Here is shell session, illustrating how to reproduce it in three
> steps. The same steps without involving HiPE don't lead to crash:
>
> % --------------------------------------------------------------
> Erlang (BEAM) emulator version 5.6.5 [source] [smp:2]
> [async-threads:0] [hipe] [kernel-poll:false]
>
> Eshell V5.6.5 (abort with ^G)
> 1> c(srv, [native]), c(req).
> {ok,req}
> 2> srv:start().
> <0.53.0>
> 3> srv ! doit.
>
> =ERROR REPORT==== 13-Feb-2009::23:08:52 ===
> Error in process <0.53.0> with exit value:
> {badarg,[{srv,handler,1},{srv,loop,1},{io,format,2}]}
>
> doit
> % --------------------------------------------------------------
>
> And two modules you need to repeat above steps:
>
> % -srv.erl-------------------------------------------------
> -module(srv).
> -export([start/0]).
>
> start() ->
> spawn(fun() -> register(?MODULE, self()), loop(fun handler/1) end).
>
> handler(Req) ->
> io:format("# ~p~n", [Req:get_time()]).
>
> loop(Handler) ->
> receive
> doit ->
> Handler(req:new(time())),
> loop(Handler);
> stop ->
> ok
> end.
> % --------------------------------------------------
>
> % -req.erl-------------------------------------------------
> -module(req, [Time]).
> -export([get_time/0]).
>
> get_time() -> Time.
> % --------------------------------------------------
>
> Actually this is more or less how Mochiweb passes its request data
> (socket, headers etc) to internal funcions through a callback one. It
> seems that Mochiweb has been using parameterized modules to hide
> request representation from an user since its first versions. So it
> becomes impossible to compile such a http-handler using HiPE :(
Thanks for reporting this problem. I'll take a look it it.
/Mikael
More information about the erlang-bugs
mailing list