diff options
author | Björn Gustavsson <[email protected]> | 2010-04-23 10:04:42 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-05-11 08:54:26 +0200 |
commit | 9c91901e8e57fd6366fd966e754a62a8a205c000 (patch) | |
tree | 9c8299fcb4752ec79e32d20d1bd4c56f47b32a94 /erts/emulator/beam/erl_db_util.c | |
parent | f7829c91d742f1daea27b7ff5d8dcb5f262fd3a9 (diff) | |
download | otp-9c91901e8e57fd6366fd966e754a62a8a205c000.tar.gz otp-9c91901e8e57fd6366fd966e754a62a8a205c000.tar.bz2 otp-9c91901e8e57fd6366fd966e754a62a8a205c000.zip |
erts: Implement recv_mark/1 and recv_set/1 for real
The recv_mark/1 instruction will both save the current
position in the message queue and a mark (the address of the
loop_rec/2 instruction just following the recv_set/1
instruction). The recv_mark/1 instruction will only
use the saved position if the mark is correct.
The reason for saving and verifying the mark is that
the compiler does not need to guarantee that no other
receive instruction can be executed in between the
recv_mark/1 and recv_set/1 instructions (the mark will
be cleared by the remove_message/0 instruction when a message
is removed from the message queue). That means that arbitrary
function calls in between those instruction can be allowed.
Diffstat (limited to 'erts/emulator/beam/erl_db_util.c')
0 files changed, 0 insertions, 0 deletions