diff options
author | Sverker Eriksson <[email protected]> | 2018-02-27 16:47:21 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2018-02-27 16:47:21 +0100 |
commit | abe17be1e6f2ab51606c6a3b19d6a16a429f95a8 (patch) | |
tree | 9028b18405e6765e64eeb50a112ede8d50547c9b /erts/emulator/beam/erl_bif_port.c | |
parent | 7d8d1c67ec71fbf24b8659faf684fbdc7ab79378 (diff) | |
parent | 2e2d1ea0affa72b613d291f4d9002292d878fc2b (diff) | |
download | otp-abe17be1e6f2ab51606c6a3b19d6a16a429f95a8.tar.gz otp-abe17be1e6f2ab51606c6a3b19d6a16a429f95a8.tar.bz2 otp-abe17be1e6f2ab51606c6a3b19d6a16a429f95a8.zip |
Merge branch 'sverker/erts/more-crash-dump-info/OTP-14820' into maint
* sverker/erts/more-crash-dump-info/OTP-14820:
erts,observer: Add port-suspended pids to crash dump
erts,observer: Add port states and flags to crash dump
erts,observer: Add dirty schedulers to crash dump
observer: Refactor get_schedulerinfo1
erts,observer: Add more port info to crash dump
erts: Cleanup dump_process_info()
erts: Include failing garbing process in crash dump
erts: Remove unused args to collect_live_heap_frags
erts: Add binary vheap sizes to crash dump
Diffstat (limited to 'erts/emulator/beam/erl_bif_port.c')
-rw-r--r-- | erts/emulator/beam/erl_bif_port.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c index ff03151619..d05507118e 100644 --- a/erts/emulator/beam/erl_bif_port.c +++ b/erts/emulator/beam/erl_bif_port.c @@ -647,6 +647,27 @@ BIF_RETTYPE port_get_data_1(BIF_ALIST_1) BIF_RET(res); } +Eterm erts_port_data_read(Port* prt) +{ + Eterm res; + erts_aint_t data; + + data = erts_smp_atomic_read_ddrb(&prt->data); + if (data == (erts_aint_t)NULL) + return am_undefined; /* Port terminated by racing thread */ + + if ((data & 0x3) != 0) { + res = (Eterm) (UWord) data; + ASSERT(is_immed(res)); + } + else { + ErtsPortDataHeap *pdhp = (ErtsPortDataHeap *) data; + res = pdhp->data; + } + return res; +} + + /* * Open a port. Most of the work is not done here but rather in * the file io.c. |