diff --git a/Source/Android/Bridge/jniBridge.cpp b/Source/Android/Bridge/jniBridge.cpp index d11e7e694..9a3f03040 100644 --- a/Source/Android/Bridge/jniBridge.cpp +++ b/Source/Android/Bridge/jniBridge.cpp @@ -60,6 +60,9 @@ class AndroidLogger : public CTraceModule default: __android_log_print(ANDROID_LOG_UNKNOWN, TraceModule(module), "%05d: %s: %s",CThread::GetCurrentThreadId(),function,Message); break; } } + void FlushTrace(void) + { + } }; AndroidLogger * g_Logger = NULL; static pthread_key_t g_ThreadKey; diff --git a/Source/Android/PluginAudio/trace.cpp b/Source/Android/PluginAudio/trace.cpp index 2a63d0639..fbb123b2a 100644 --- a/Source/Android/PluginAudio/trace.cpp +++ b/Source/Android/PluginAudio/trace.cpp @@ -32,6 +32,9 @@ class AndroidLogger : public CTraceModule default: __android_log_print(ANDROID_LOG_UNKNOWN, TraceModule(module), "%s: %s", function, Message); break; } } + void FlushTrace(void) + { + } }; static AndroidLogger * g_AndroidLogger = NULL; #endif diff --git a/Source/Common/Trace.cpp b/Source/Common/Trace.cpp index fffcc3449..4a0a1730a 100644 --- a/Source/Common/Trace.cpp +++ b/Source/Common/Trace.cpp @@ -27,7 +27,8 @@ public: CTraceModule * AddTraceModule(CTraceModule * TraceModule); CTraceModule * RemoveTraceModule(CTraceModule * TraceModule); - void CloseTrace(void); + void CloseTrace(void); + void FlushTrace(void); }; CTraceLog & GetTraceObjet(void) @@ -56,6 +57,11 @@ void WriteTraceFull(uint32_t module, uint8_t severity, const char * file, int li va_end(args); } +void TraceFlushLog(void) +{ + GetTraceObjet().FlushTrace(); +} + void CloseTrace(void) { g_TraceClosed = true; @@ -118,6 +124,16 @@ void CTraceLog::CloseTrace(void) m_Modules.clear(); } +void CTraceLog::FlushTrace(void) +{ + CGuard Guard(m_CS); + for (uint32_t i = 0, n = m_Modules.size(); i < n; i++) + { + m_Modules[i]->FlushTrace(); + } + +} + void CTraceLog::TraceMessage(uint32_t module, uint8_t severity, const char * file, int line, const char * function, const char * Message) { CGuard Guard(m_CS); @@ -230,7 +246,13 @@ void CTraceFileLog::Write(uint32_t module, uint8_t severity, const char * /*file } } +void CTraceFileLog::FlushTrace(void) +{ + m_hLogFile.Flush(); +} + void CTraceFileLog::SetFlushFile(bool bFlushFile) { m_FlushFile = bFlushFile; + FlushTrace(); } \ No newline at end of file diff --git a/Source/Common/Trace.h b/Source/Common/Trace.h index 58aa0a1c7..8f6440bc7 100644 --- a/Source/Common/Trace.h +++ b/Source/Common/Trace.h @@ -20,6 +20,7 @@ enum TraceSeverity __interface CTraceModule { virtual void Write(uint32_t module, uint8_t severity, const char * file, int line, const char * function, const char * Message) = 0; + virtual void FlushTrace() = 0; }; class CTraceFileLog : public CTraceModule @@ -30,6 +31,7 @@ public: void SetFlushFile(bool bFlushFile); void Write(uint32_t module, uint8_t severity, const char * file, int line, const char * function, const char * Message); + void FlushTrace (void); private: CLog m_hLogFile; @@ -50,6 +52,7 @@ void TraceSetModuleName(uint8_t module, const char * Name); void CloseTrace(void); void WriteTraceFull(uint32_t module, uint8_t severity, const char * file, int line, const char * function, const char *format, ...); +void TraceFlushLog(void); void TraceSetMaxModule(uint32_t MaxModule, uint8_t DefaultSeverity); extern uint32_t * g_ModuleLogLevel; diff --git a/Source/Glide64/trace.cpp b/Source/Glide64/trace.cpp index e4140f902..78fc73a7f 100644 --- a/Source/Glide64/trace.cpp +++ b/Source/Glide64/trace.cpp @@ -25,6 +25,10 @@ class AndroidLogger : public CTraceModule default: __android_log_print(ANDROID_LOG_UNKNOWN, TraceModule(module), "%s: %s", function, Message); break; } } + + void FlushTrace(void) + { + } }; static AndroidLogger * g_AndroidLogger = NULL; #endif diff --git a/Source/Project64-core/MemoryExceptionFilter.cpp b/Source/Project64-core/MemoryExceptionFilter.cpp index 407800a98..742e6b034 100644 --- a/Source/Project64-core/MemoryExceptionFilter.cpp +++ b/Source/Project64-core/MemoryExceptionFilter.cpp @@ -427,6 +427,7 @@ bool CMipsMemoryVM::FilterArmException(uint32_t MemAddress, mcontext_t & context WriteTrace(TraceExceptionHandler, TraceError, "OpCode32->uint32.rt: %X",OpCode32->uint32.rt); WriteTrace(TraceExceptionHandler, TraceError, "OpCode32->uint32.opcode2: %X",OpCode32->uint32.opcode2); WriteTrace(TraceExceptionHandler, TraceError, "OpCode32->uint32.rm: %X",OpCode32->uint32.rm); + TraceFlushLog(); g_Notify->BreakPoint(__FILE__, __LINE__); return false; }