aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_bif_port.c
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2018-02-27 16:47:21 +0100
committerSverker Eriksson <[email protected]>2018-02-27 16:47:21 +0100
commitabe17be1e6f2ab51606c6a3b19d6a16a429f95a8 (patch)
tree9028b18405e6765e64eeb50a112ede8d50547c9b /erts/emulator/beam/erl_bif_port.c
parent7d8d1c67ec71fbf24b8659faf684fbdc7ab79378 (diff)
parent2e2d1ea0affa72b613d291f4d9002292d878fc2b (diff)
downloadotp-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.c21
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.