Code changing

Luke Gorrie <>
Thu Sep 30 08:39:08 CEST 1999


G'day all,

A couple of questions about code changes in an erlang system. First,
we're having a problem changing code in etk-using modules. The module
itself is a gen_event and copes with code changes okay, but the
command functions given to tk objects don't seem to work
anymore. After a code change, I get:

tkfun error: 1 : {function_clause,{messaging_gui,
                                      module_lambda_1,
                                      [10574021,[],{}]}}

I've tried to fix this with:

code_change(OldVsn, State, Extra) ->
    etk:configure(State#state.button, [{command, fun view_message/0}]),
    {ok, State}.

But that didn't seem to do the trick - but then I don't really know
Tk, maybe I'm appending another command rather than replacing
it. How should I make etk callbacks update-safe, or am I wrong
about what the problem is?

The other issue is with gen_event and code_change. If I don't make
a code_change/3 function, my gen_event processes don't survive code
changes. I put this down to some code in gen_event:

{ok, NewState} = Module:code_change(OldVsn, H#handler.state, Extra),

Whereas gen_server and gen_fsm use a catch on this call, and
(gen_server at least) work with modules that don't declare
code_change. This seems to mean that it's not okay to omit
code_change/3 from gen_event modules, and so I've attached a patch to
erlang.el's gen_event skeleton to add code_change incase it's useful
to anyone else.

Is it actually ok to omit code_change from gen_servers? I had a little
trace through gen_server and sys but I'm still not clear on what
ultimately happens with the caught error from gen_server's call to a
non-existent code_change/3.

Cheers,
Luke

-------------- next part --------------
A non-text attachment was scrubbed...
Name: elisp-gen_event.patch
Type: application/x-patch
Size: 880 bytes
Desc: Patch adding code_change/3 to gen_event skeleton
URL: <http://erlang.org/pipermail/erlang-questions/attachments/19990930/48f0d218/attachment.bin>
-------------- next part --------------



More information about the erlang-questions mailing list