Delay the atexit call to prof_log_start().
So that atexit() is only done when prof_log is used.
This commit is contained in:
parent
11b6db7448
commit
ab0f1604b4
@ -412,6 +412,13 @@ prof_log_dummy_set(bool new_value) {
|
||||
prof_log_dummy = new_value;
|
||||
}
|
||||
|
||||
/* Used as an atexit function to stop logging on exit. */
|
||||
static void
|
||||
prof_log_stop_final(void) {
|
||||
tsd_t *tsd = tsd_fetch();
|
||||
prof_log_stop(tsd_tsdn(tsd));
|
||||
}
|
||||
|
||||
JEMALLOC_COLD
|
||||
bool
|
||||
prof_log_start(tsdn_t *tsdn, const char *filename) {
|
||||
@ -425,6 +432,20 @@ prof_log_start(tsdn_t *tsdn, const char *filename) {
|
||||
|
||||
malloc_mutex_lock(tsdn, &log_mtx);
|
||||
|
||||
static bool prof_log_atexit_called = false;
|
||||
if (!prof_log_atexit_called) {
|
||||
prof_log_atexit_called = true;
|
||||
if (atexit(prof_log_stop_final) != 0) {
|
||||
malloc_write("<jemalloc>: Error in atexit() "
|
||||
"for logging\n");
|
||||
if (opt_abort) {
|
||||
abort();
|
||||
}
|
||||
ret = true;
|
||||
goto label_done;
|
||||
}
|
||||
}
|
||||
|
||||
if (prof_logging_state != prof_logging_state_stopped) {
|
||||
ret = true;
|
||||
} else if (filename == NULL) {
|
||||
@ -442,19 +463,12 @@ prof_log_start(tsdn_t *tsdn, const char *filename) {
|
||||
if (!ret) {
|
||||
nstime_prof_init_update(&log_start_timestamp);
|
||||
}
|
||||
|
||||
label_done:
|
||||
malloc_mutex_unlock(tsdn, &log_mtx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Used as an atexit function to stop logging on exit. */
|
||||
static void
|
||||
prof_log_stop_final(void) {
|
||||
tsd_t *tsd = tsd_fetch();
|
||||
prof_log_stop(tsd_tsdn(tsd));
|
||||
}
|
||||
|
||||
struct prof_emitter_cb_arg_s {
|
||||
int fd;
|
||||
ssize_t ret;
|
||||
@ -697,15 +711,6 @@ prof_log_init(tsd_t *tsd) {
|
||||
prof_log_start(tsd_tsdn(tsd), NULL);
|
||||
}
|
||||
|
||||
if (atexit(prof_log_stop_final) != 0) {
|
||||
malloc_write("<jemalloc>: Error in atexit() "
|
||||
"for logging\n");
|
||||
if (opt_abort) {
|
||||
abort();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user