diff options
author | Rickard Green <[email protected]> | 2015-11-24 15:57:55 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2015-12-08 14:47:47 +0100 |
commit | 19c4689eea86f26c5af9b8f712c227ce4f62310b (patch) | |
tree | 347573288318147a6948ae57ecea5e716ce5206e /erts/emulator/beam/bif.c | |
parent | 1cd97bc82d042bc713473932af7d6061065f6527 (diff) | |
download | otp-19c4689eea86f26c5af9b8f712c227ce4f62310b.tar.gz otp-19c4689eea86f26c5af9b8f712c227ce4f62310b.tar.bz2 otp-19c4689eea86f26c5af9b8f712c227ce4f62310b.zip |
Replace off_heap_message_queue option with message_queue_data option
The message_queue_data option can have the values
- off_heap
- on_heap
- mixed
Diffstat (limited to 'erts/emulator/beam/bif.c')
-rw-r--r-- | erts/emulator/beam/bif.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c index f0340540cb..410a6cecac 100644 --- a/erts/emulator/beam/bif.c +++ b/erts/emulator/beam/bif.c @@ -910,13 +910,22 @@ BIF_RETTYPE spawn_opt_1(BIF_ALIST_1) so.priority = PRIORITY_LOW; else goto error; - } else if (arg == am_off_heap_message_queue) { - if (val == am_true) - so.flags |= SPO_OFF_HEAP_MSGQ; - else if (val == am_false) + } else if (arg == am_message_queue_data) { + switch (val) { + case am_mixed: + so.flags &= ~(SPO_OFF_HEAP_MSGQ|SPO_ON_HEAP_MSGQ); + break; + case am_on_heap: so.flags &= ~SPO_OFF_HEAP_MSGQ; - else + so.flags |= SPO_ON_HEAP_MSGQ; + break; + case am_off_heap: + so.flags &= ~SPO_ON_HEAP_MSGQ; + so.flags |= SPO_OFF_HEAP_MSGQ; + break; + default: goto error; + } } else if (arg == am_min_heap_size && is_small(val)) { Sint min_heap_size = signed_val(val); if (min_heap_size < 0) { @@ -1695,15 +1704,10 @@ BIF_RETTYPE process_flag_2(BIF_ALIST_2) } BIF_RET(old_value); } - else if (BIF_ARG_1 == am_off_heap_message_queue) { - int enable; - if (BIF_ARG_2 == am_true) - enable = 1; - else if (BIF_ARG_2 == am_false) - enable = 0; - else + else if (BIF_ARG_1 == am_message_queue_data) { + old_value = erts_change_message_queue_management(BIF_P, BIF_ARG_2); + if (is_non_value(old_value)) goto error; - old_value = erts_change_off_heap_message_queue_state(BIF_P, enable); BIF_RET(old_value); } else if (BIF_ARG_1 == am_sensitive) { |