From 76d91d5eefd2bcda63a458e14d3251b8550a92c3 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 12 Sep 2020 23:18:04 +0100 Subject: [PATCH] Don't allow static logfile string to destruct before RenderDoc singleton --- renderdoc/common/common.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/renderdoc/common/common.cpp b/renderdoc/common/common.cpp index 6220f4418..d0cdf54dd 100644 --- a/renderdoc/common/common.cpp +++ b/renderdoc/common/common.cpp @@ -248,29 +248,30 @@ uint64_t Log2Floor(uint64_t value) } #endif -static rdcstr logfile; +// deliberately leak so it doesn't get destroyed before our static RenderDoc destructor needs it +static rdcstr *logfile = new rdcstr; static FileIO::LogFileHandle *logfileHandle = NULL; const char *rdclog_getfilename() { - return logfile.c_str(); + return logfile->c_str(); } void rdclog_filename(const char *filename) { - rdcstr previous = logfile; + rdcstr previous = *logfile; - logfile = ""; + *logfile = ""; if(filename && filename[0]) - logfile = filename; + *logfile = filename; FileIO::logfile_close(logfileHandle, NULL); logfileHandle = NULL; - if(!logfile.empty()) + if(!logfile->empty()) { - logfileHandle = FileIO::logfile_open(logfile.c_str()); + logfileHandle = FileIO::logfile_open(logfile->c_str()); if(logfileHandle && previous.c_str()) { @@ -295,7 +296,7 @@ void rdclog_enableoutput() void rdclog_closelog() { log_output_enabled = false; - FileIO::logfile_close(logfileHandle, logfile.c_str()); + FileIO::logfile_close(logfileHandle, logfile->c_str()); } void rdclog_flush()