# HG changeset patch # User Emmanuel Gil Peyrot # Date 1575832381 -3600 # Node ID f953ae5b37320e7970c7a9c2cb5883cf60f3a501 # Parent 414f8611f3446f31ad4f1a20ce05f4eb7f964778 PyTouhou: Fix GLFW callbacks to be nogil diff --git a/pytouhou/lib/glfw.pyx b/pytouhou/lib/glfw.pyx --- a/pytouhou/lib/glfw.pyx +++ b/pytouhou/lib/glfw.pyx @@ -27,31 +27,35 @@ OPENGL_API = GLFW_OPENGL_API OPENGL_ES_API = GLFW_OPENGL_ES_API OPENGL_CORE_PROFILE = GLFW_OPENGL_CORE_PROFILE -cdef void error_callback(int a, const char* b): - print('GLFW error 0x%x: %s' % (a, b.decode('utf-8'))) +cdef void error_callback(int a, const char* b) nogil: + with gil: + print('GLFW error 0x%x: %s' % (a, b.decode('utf-8'))) cdef list _global_events = [] -cdef void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods): - if action != GLFW_PRESS: - return - if key == GLFW_KEY_ESCAPE: - _global_events.append((gui.PAUSE, None)) - elif key in (GLFW_KEY_P, GLFW_KEY_HOME): - _global_events.append((gui.SCREENSHOT, None)) - elif key == GLFW_KEY_DOWN: - _global_events.append((gui.DOWN, None)) - elif key == GLFW_KEY_F11: - _global_events.append((gui.FULLSCREEN, None)) - elif key == GLFW_KEY_ENTER: - if mods & GLFW_MOD_ALT: +cdef void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) nogil: + with gil: + if action != GLFW_PRESS: + return + if key == GLFW_KEY_ESCAPE: + _global_events.append((gui.PAUSE, None)) + elif key in (GLFW_KEY_P, GLFW_KEY_HOME): + _global_events.append((gui.SCREENSHOT, None)) + elif key == GLFW_KEY_DOWN: + _global_events.append((gui.DOWN, None)) + elif key == GLFW_KEY_F11: _global_events.append((gui.FULLSCREEN, None)) + elif key == GLFW_KEY_ENTER: + if mods & GLFW_MOD_ALT: + _global_events.append((gui.FULLSCREEN, None)) -cdef void size_callback(GLFWwindow* window, int width, int height): - _global_events.append((gui.RESIZE, (width, height))) +cdef void size_callback(GLFWwindow* window, int width, int height) nogil: + with gil: + _global_events.append((gui.RESIZE, (width, height))) -cdef void close_callback(GLFWwindow* window): - _global_events.append((gui.EXIT, None)) +cdef void close_callback(GLFWwindow* window) nogil: + with gil: + _global_events.append((gui.EXIT, None)) cdef void init() except *: glfwSetErrorCallback(error_callback)