From d5c2b072841ea5db80d482d656c17af04113eddc Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 11 Jul 2026 11:59:21 -0700 Subject: [PATCH] visionipc: release the GIL in python recv Co-Authored-By: Claude Fable 5 --- msgq/visionipc/visionipc.pxd | 2 +- msgq/visionipc/visionipc_pyx.pyx | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) 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)