diff options
author | Björn-Egil Dahlberg <[email protected]> | 2012-12-06 15:02:45 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2012-12-06 15:02:45 +0100 |
commit | 1cbd897c43f0dab1275392a3736e4629c1f80243 (patch) | |
tree | 523c09bf004e1028c6a4f0baa19f24f973b1b7bf /erts/emulator/beam/break.c | |
parent | 214d1aaf4749ae6a7bb0506cf448551a312a9a58 (diff) | |
parent | 05f8e1029d5bfc102558c68264ee91757788885e (diff) | |
download | otp-1cbd897c43f0dab1275392a3736e4629c1f80243.tar.gz otp-1cbd897c43f0dab1275392a3736e4629c1f80243.tar.bz2 otp-1cbd897c43f0dab1275392a3736e4629c1f80243.zip |
Merge tag 'erl_1219' into maintOTP_R15B03-1
erts: Patch 1219
OTP-10602 Create an erl_crash.dump if no heart exists and no ERL_CRASH_DUMP_SECONDS
is set (behaviour changed). Don't create an erl_crash.dump
if heart do exists and no ERL_CRASH_DUMP_SECONDS is set
(behaviour not changed). This changes the behaviour back
to the R15B02 default considering if a beam was running
with no heart.
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"; |