diff options
author | Erlang/OTP <[email protected]> | 2012-12-06 14:58:48 +0100 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2012-12-06 14:58:48 +0100 |
commit | 99e66ce7f6bd42a380fc474f49af3130922ee11f (patch) | |
tree | 507cf7287a8ed2b076769b244954cc21e229b53d /erts/emulator/beam/break.c | |
parent | 2eb32af0fdd74bb4d61f952fbd96e548bb916eb1 (diff) | |
parent | 7d926758c91abc7008dd06a2a944e2a17b9b0e85 (diff) | |
download | otp-99e66ce7f6bd42a380fc474f49af3130922ee11f.tar.gz otp-99e66ce7f6bd42a380fc474f49af3130922ee11f.tar.bz2 otp-99e66ce7f6bd42a380fc474f49af3130922ee11f.zip |
Merge branch 'egil/fix-crashdump-default/OTP-10602' into maint-r15
* egil/fix-crashdump-default/OTP-10602:
erts: Change default of erl_crash.dump
Diffstat (limited to 'erts/emulator/beam/break.c')
-rw-r--r-- | erts/emulator/beam/break.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/erts/emulator/beam/break.c b/erts/emulator/beam/break.c index cf66f4e6b6..f7e9f15655 100644 --- a/erts/emulator/beam/break.c +++ b/erts/emulator/beam/break.c @@ -657,6 +657,7 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args) char dumpnamebuf[MAXPATHLEN]; char* dumpname; int secs; + int env_erl_crash_dump_seconds_set = 1; if (ERTS_SOMEONE_IS_CRASH_DUMPING) return; @@ -681,6 +682,8 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args) envsz = sizeof(env); /* ERL_CRASH_DUMP_SECONDS not set + * if we have a heart port, break immediately + * otherwise dump crash indefinitely (until crash is complete) * same as ERL_CRASH_DUMP_SECONDS = 0 * - do not write dump * - do not set an alarm @@ -702,8 +705,10 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args) */ if (erts_sys_getenv__("ERL_CRASH_DUMP_SECONDS", env, &envsz) != 0) { - return; /* break immediately */ + env_erl_crash_dump_seconds_set = 0; + secs = -1; } else { + env_erl_crash_dump_seconds_set = 1; secs = atoi(env); } @@ -711,7 +716,16 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args) return; } - erts_sys_prepare_crash_dump(secs); + /* erts_sys_prepare_crash_dump returns 1 if heart port is found, otherwise 0 + * If we don't find heart (0) and we don't have ERL_CRASH_DUMP_SECONDS set + * we should continue writing a dump + * + * beware: secs -1 means no alarm + */ + + if (erts_sys_prepare_crash_dump(secs) && !env_erl_crash_dump_seconds_set ) { + return; + } if (erts_sys_getenv__("ERL_CRASH_DUMP",&dumpnamebuf[0],&dumpnamebufsize) != 0) dumpname = "erl_crash.dump"; |