bugfixes
This commit is contained in:
+19
-3
@@ -244,6 +244,7 @@ long CrashSymLookup(VDDisassemblyContext *pctx, unsigned long virtAddr, char *bu
|
|||||||
return VDDebugInfoLookupRVA(&g_debugInfo, virtAddr, buf, buf_len);
|
return VDDebugInfoLookupRVA(&g_debugInfo, virtAddr, buf, buf_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "bass/bass.h"
|
||||||
long __stdcall CrashHandler(EXCEPTION_POINTERS *pExc) {
|
long __stdcall CrashHandler(EXCEPTION_POINTERS *pExc) {
|
||||||
SetUnhandledExceptionFilter(NULL);
|
SetUnhandledExceptionFilter(NULL);
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
@@ -319,6 +320,15 @@ long __stdcall CrashHandler(EXCEPTION_POINTERS *pExc) {
|
|||||||
* FALSE if we should just die. */
|
* FALSE if we should just die. */
|
||||||
VDDebugInfoDeinit(&g_debugInfo);
|
VDDebugInfoDeinit(&g_debugInfo);
|
||||||
|
|
||||||
|
/* Major hack:
|
||||||
|
* Bass crashes if we close without freeing it, even if it's by
|
||||||
|
* crashing ourselves. Now, it's far from safe to call these functions
|
||||||
|
* after a crash, but if we don't it'll crash anyway, so we have
|
||||||
|
* nothing to lose. */
|
||||||
|
|
||||||
|
BASS_Stop();
|
||||||
|
BASS_Free();
|
||||||
|
|
||||||
if(ret)
|
if(ret)
|
||||||
UnhandledExceptionFilter(pExc);
|
UnhandledExceptionFilter(pExc);
|
||||||
|
|
||||||
@@ -343,7 +353,6 @@ static void Report(HWND hwndList, HANDLE hFile, const char *format, ...) {
|
|||||||
buf[ch] = '\r';
|
buf[ch] = '\r';
|
||||||
buf[ch+1] = '\n';
|
buf[ch+1] = '\n';
|
||||||
WriteFile(hFile, buf, ch+2, &dwActual, NULL);
|
WriteFile(hFile, buf, ch+2, &dwActual, NULL);
|
||||||
FlushFileBuffers(hFile);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1251,6 +1260,7 @@ void DoSave(const EXCEPTION_POINTERS *pExc) {
|
|||||||
while(idx = g_pcdw->getInstruction(tbuf, idx)) {
|
while(idx = g_pcdw->getInstruction(tbuf, idx)) {
|
||||||
Report(NULL, hFile, "%s", tbuf);
|
Report(NULL, hFile, "%s", tbuf);
|
||||||
}
|
}
|
||||||
|
FlushFileBuffers(hFile);
|
||||||
|
|
||||||
Report(NULL, hFile, "");
|
Report(NULL, hFile, "");
|
||||||
|
|
||||||
@@ -1338,6 +1348,9 @@ BOOL APIENTRY CrashDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|||||||
DoSave(s_pExc);
|
DoSave(s_pExc);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
char cwd[MAX_PATH];
|
||||||
|
SpliceProgramPath(cwd, MAX_PATH, "");
|
||||||
|
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
STARTUPINFO si;
|
STARTUPINFO si;
|
||||||
ZeroMemory( &si, sizeof(si) );
|
ZeroMemory( &si, sizeof(si) );
|
||||||
@@ -1350,7 +1363,7 @@ BOOL APIENTRY CrashDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|||||||
false, // handle inheritance flag
|
false, // handle inheritance flag
|
||||||
0, // creation flags
|
0, // creation flags
|
||||||
NULL, // pointer to new environment block
|
NULL, // pointer to new environment block
|
||||||
NULL, // pointer to current directory name
|
cwd, // pointer to current directory name
|
||||||
&si, // pointer to STARTUPINFO
|
&si, // pointer to STARTUPINFO
|
||||||
&pi // pointer to PROCESS_INFORMATION
|
&pi // pointer to PROCESS_INFORMATION
|
||||||
);
|
);
|
||||||
@@ -1358,6 +1371,9 @@ BOOL APIENTRY CrashDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
case IDC_BUTTON_RESTART:
|
case IDC_BUTTON_RESTART:
|
||||||
{
|
{
|
||||||
|
char cwd[MAX_PATH];
|
||||||
|
SpliceProgramPath(cwd, MAX_PATH, "");
|
||||||
|
|
||||||
// Launch StepMania
|
// Launch StepMania
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
STARTUPINFO si;
|
STARTUPINFO si;
|
||||||
@@ -1371,7 +1387,7 @@ BOOL APIENTRY CrashDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|||||||
false, // handle inheritance flag
|
false, // handle inheritance flag
|
||||||
0, // creation flags
|
0, // creation flags
|
||||||
NULL, // pointer to new environment block
|
NULL, // pointer to new environment block
|
||||||
NULL, // pointer to current directory name
|
cwd, // pointer to current directory name
|
||||||
&si, // pointer to STARTUPINFO
|
&si, // pointer to STARTUPINFO
|
||||||
&pi // pointer to PROCESS_INFORMATION
|
&pi // pointer to PROCESS_INFORMATION
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user