diff --git a/msgq/visionipc/visionipc.pxd b/msgq/visionipc/visionipc.pxd index decd454b7..602d0dc94 100644 --- a/msgq/visionipc/visionipc.pxd +++ b/msgq/visionipc/visionipc.pxd @@ -46,7 +46,7 @@ cdef extern from "msgq/visionipc/visionipc_client.h": int num_buffers VisionBuf buffers[1] VisionIpcClient(string, VisionStreamType, bool) - VisionBuf * recv(VisionIpcBufExtra *, int) + VisionBuf * recv(VisionIpcBufExtra *, int) nogil bool connect(bool) bool is_connected() @staticmethod diff --git a/msgq/visionipc/visionipc_pyx.pyx b/msgq/visionipc/visionipc_pyx.pyx index 65973459e..533762bb7 100644 --- a/msgq/visionipc/visionipc_pyx.pyx +++ b/msgq/visionipc/visionipc_pyx.pyx @@ -151,7 +151,10 @@ cdef class VisionIpcClient: return self.extra.valid def recv(self, int timeout_ms=100): - buf = self.client.recv(&self.extra, timeout_ms) + cdef cppVisionBuf * buf + # release the GIL, this can block for timeout_ms + with nogil: + buf = self.client.recv(&self.extra, timeout_ms) if not buf: return None return VisionBuf.create(buf)