@@ -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); | ||||