diff options
author | Björn-Egil Dahlberg <[email protected]> | 2012-10-24 14:22:36 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2012-10-24 14:22:36 +0200 |
commit | bb915519aa16f6410b19c6f868805b47717f11fa (patch) | |
tree | 02171f62ff06e14586a803b6a69c885978137cd8 /erts/emulator/beam/io.c | |
parent | 49b7b5d5158f89fb4bee068719d000d6c753fdcd (diff) | |
parent | d5733bc3e34449affde2594d85b905c8ab440d42 (diff) | |
download | otp-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.c | 26 |
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; +} |