| @@ -29,9 +29,10 @@ using namespace rack; | |||||
| static void fatalSignalHandler(int sig) { | static void fatalSignalHandler(int sig) { | ||||
| // Only catch one signal | // Only catch one signal | ||||
| static bool caught = false; | static bool caught = false; | ||||
| if (caught) | |||||
| exit(1); | |||||
| bool localCaught = caught; | |||||
| caught = true; | caught = true; | ||||
| if (localCaught) | |||||
| exit(1); | |||||
| FATAL("Fatal signal %d. Stack trace:\n%s", sig, system::getStackTrace().c_str()); | FATAL("Fatal signal %d. Stack trace:\n%s", sig, system::getStackTrace().c_str()); | ||||
| @@ -81,11 +82,14 @@ int main(int argc, char *argv[]) { | |||||
| asset::init(devMode); | asset::init(devMode); | ||||
| logger::init(devMode); | logger::init(devMode); | ||||
| // We can now install a signal handler and log the output | // We can now install a signal handler and log the output | ||||
| // Mac has its own decent crash handler | |||||
| #if defined ARCH_LIN || defined ARCH_WIN | |||||
| signal(SIGABRT, fatalSignalHandler); | signal(SIGABRT, fatalSignalHandler); | ||||
| signal(SIGFPE, fatalSignalHandler); | signal(SIGFPE, fatalSignalHandler); | ||||
| signal(SIGILL, fatalSignalHandler); | signal(SIGILL, fatalSignalHandler); | ||||
| signal(SIGSEGV, fatalSignalHandler); | signal(SIGSEGV, fatalSignalHandler); | ||||
| signal(SIGTERM, fatalSignalHandler); | signal(SIGTERM, fatalSignalHandler); | ||||
| #endif | |||||
| // Log environment | // Log environment | ||||
| INFO("%s v%s", app::APP_NAME, app::APP_VERSION); | INFO("%s v%s", app::APP_NAME, app::APP_VERSION); | ||||
| @@ -123,7 +123,7 @@ std::string getStackTrace() { | |||||
| stackLen = backtrace(stack, stackLen); | stackLen = backtrace(stack, stackLen); | ||||
| char **strings = backtrace_symbols(stack, stackLen); | char **strings = backtrace_symbols(stack, stackLen); | ||||
| for (int i = 0; i < stackLen; i++) { | |||||
| for (int i = 1; i < stackLen; i++) { | |||||
| s += string::f("%d: %s\n", stackLen - i - 1, strings[i]); | s += string::f("%d: %s\n", stackLen - i - 1, strings[i]); | ||||
| } | } | ||||
| free(strings); | free(strings); | ||||
| @@ -136,7 +136,7 @@ std::string getStackTrace() { | |||||
| symbol->MaxNameLen = 255; | symbol->MaxNameLen = 255; | ||||
| symbol->SizeOfStruct = sizeof(SYMBOL_INFO); | symbol->SizeOfStruct = sizeof(SYMBOL_INFO); | ||||
| for (int i = 0; i < stackLen; i++) { | |||||
| for (int i = 1; i < stackLen; i++) { | |||||
| SymFromAddr(process, (DWORD64) stack[i], 0, symbol); | SymFromAddr(process, (DWORD64) stack[i], 0, symbol); | ||||
| s += string::f("%d: %s 0x%0x\n", stackLen - i - 1, symbol->Name, symbol->Address); | s += string::f("%d: %s 0x%0x\n", stackLen - i - 1, symbol->Name, symbol->Address); | ||||
| } | } | ||||
| @@ -200,7 +200,7 @@ Window::Window() { | |||||
| glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | ||||
| #endif | #endif | ||||
| glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); | glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); | ||||
| glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); | |||||
| // glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); | |||||
| // Create window | // Create window | ||||
| win = glfwCreateWindow(800, 600, "", NULL, NULL); | win = glfwCreateWindow(800, 600, "", NULL, NULL); | ||||
| @@ -362,6 +362,7 @@ void Window::run() { | |||||
| glfwGetWindowSize(win, &winWidth, &winHeight); | glfwGetWindowSize(win, &winWidth, &winHeight); | ||||
| windowRatio = (float)fbWidth / winWidth; | windowRatio = (float)fbWidth / winWidth; | ||||
| DEBUG("%f %f", pixelRatio, windowRatio); | |||||
| // Resize scene | // Resize scene | ||||
| APP->event->rootWidget->box.size = math::Vec(fbWidth, fbHeight).div(pixelRatio); | APP->event->rootWidget->box.size = math::Vec(fbWidth, fbHeight).div(pixelRatio); | ||||