system messages (Re: Suggested Example/ emacs questions)

Ulf Wiger <>
Tue Oct 10 11:43:25 CEST 2000

I've made several false-starts trying to improve the system 
messages situation.

One idea has been to do a parse transform, looking for e.g.
'system_receive' instead of 'receive', and then inserting a match on
system messages. It's not that hard to store needed information in the
process dictionary, so that the necessary info can be extracted and
passed to the sys:handle_system_msg/6 function.

A problem then becomes what to do with a module that contains receive
statements, but no system_receive. It might be appropriate to leave
them alone.

Another problem arises with the shutdown protocol. I'd like to also
insert a match for {'EXIT', Parent, shutdown} in the system_receive,
but I don't have Parent available...

... actually, I would, if I were allowed to use get and put in guards:

   {'EXIT', Parent, shutdown} when Parent == hd(get('$ancestors')) ->

Since get() and put() are O(1) nowadays, why can't I use them in


On 10 Oct 2000, Luke Gorrie wrote:

>Ulf Wiger <> writes:
>> System messages are much harder. How to accomplish the suspend/
>> code_change/resume functionality, as well as the ordered shutdowns,
>> without messing up the normal program?
>> I've been wishing for some kind of "protected mode" section, where
>> I can write hooks to modify message reception; system messages 
>> would then be somehow pre-empted by OTP, unless I explicitly state
>> that I want to see them.
>Another dubious possibility I was thinking of is inline'ing all the
>system message handling with a macro, like:
>  receive
>    pop when Empty == false -> ...;
>    {push, Item} when Full == false -> ...;
>    ?handle_system_messages
>  end
>Just what that macro would expand to, I've no firm idea :-)
>Using non-trivial macros in Erlang doesn't feel good, though.

Ulf Wiger                                    tfn: +46  8 719 81 95
Network Architecture & Product Strategies    mob: +46 70 519 81 95
Ericsson Telecom AB,              Datacom Networks and IP Services
Varuvägen 9, Älvsjö,                    S-126 25 Stockholm, Sweden

More information about the erlang-questions mailing list