aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/io.c
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2012-10-24 14:22:36 +0200
committerBjörn-Egil Dahlberg <[email protected]>2012-10-24 14:22:36 +0200
commitbb915519aa16f6410b19c6f868805b47717f11fa (patch)
tree02171f62ff06e14586a803b6a69c885978137cd8 /erts/emulator/beam/io.c
parent49b7b5d5158f89fb4bee068719d000d6c753fdcd (diff)
parentd5733bc3e34449affde2594d85b905c8ab440d42 (diff)
downloadotp-bb915519aa16f6410b19c6f868805b47717f11fa.tar.gz
otp-bb915519aa16f6410b19c6f868805b47717f11fa.tar.bz2
otp-bb915519aa16f6410b19c6f868805b47717f11fa.zip
Merge branch 'maint'
Conflicts: erts/etc/common/heart.c
Diffstat (limited to 'erts/emulator/beam/io.c')
-rw-r--r--erts/emulator/beam/io.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index dec51f3be5..60b9238d38 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -1128,7 +1128,7 @@ int erts_write_to_port(Eterm caller_id, Port *p, Eterm list)
Uint size;
int fpe_was_unmasked;
- ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(p));
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(p) || ERTS_IS_CRASH_DUMPING);
ERTS_SMP_CHK_NO_PROC_LOCKS;
p->caller = caller_id;
@@ -5258,3 +5258,27 @@ erl_drv_getenv(char *key, char *value, size_t *value_size)
{
return erts_sys_getenv_raw(key, value, value_size);
}
+
+/* get heart_port
+ * used by erl_crash_dump
+ * - uses the fact that heart_port is registered when starting heart
+ */
+
+Port *erts_get_heart_port() {
+
+ Port* port;
+ Uint ix;
+
+ for(ix = 0; ix < erts_max_ports; ix++) {
+ port = &erts_port[ix];
+ /* only examine undead or alive ports */
+ if (port->status & ERTS_PORT_SFLGS_DEAD)
+ continue;
+ /* immediate atom compare */
+ if (port->reg && port->reg->name == am_heart_port) {
+ return port;
+ }
+ }
+
+ return NULL;
+}