Merge "Only close stdin/stdout/stderr for debug malloc."

This commit is contained in:
Christopher Ferris 2015-09-04 01:09:11 +00:00 committed by Gerrit Code Review
commit cb0d96e6a2

View File

@ -486,18 +486,19 @@ static void malloc_init_impl() {
}
static void malloc_fini_impl() {
// Our BSD stdio implementation doesn't close the standard streams, it only flushes them.
// And it doesn't do that until its atexit handler is run, and we run first!
// It's great that other unclosed FILE*s show up as malloc leaks, but we need to manually
// clean up the standard streams ourselves.
fclose(stdin);
fclose(stdout);
fclose(stderr);
if (libc_malloc_impl_handle != NULL) {
MallocDebugFini malloc_debug_finalize =
reinterpret_cast<MallocDebugFini>(dlsym(libc_malloc_impl_handle, "malloc_debug_finalize"));
if (malloc_debug_finalize != NULL) {
// Our BSD stdio implementation doesn't close the standard streams,
// it only flushes them. And it doesn't do that until its atexit
// handler is run, and we run first! It's great that other unclosed
// FILE*s show up as malloc leaks, but we need to manually clean up
// the standard streams ourselves.
fclose(stdin);
fclose(stdout);
fclose(stderr);
malloc_debug_finalize(g_malloc_debug_level);
}
}