@@ -8,11 +8,13 @@ from cython.view cimport array
88from libc.string cimport memcpy
99from libc.stdint cimport uint32_t, uint64_t
1010from libcpp cimport bool
11+ from libcpp.set cimport set as cpp_set
1112from libcpp.string cimport string
1213
1314from .visionipc cimport VisionIpcServer as cppVisionIpcServer
1415from .visionipc cimport VisionIpcClient as cppVisionIpcClient
1516from .visionipc cimport VisionBuf as cppVisionBuf
17+ from .visionipc cimport VisionStreamType as cppVisionStreamType
1618from .visionipc cimport VisionIpcBufExtra
1719from .visionipc cimport get_endpoint_name as cpp_get_endpoint_name
1820
@@ -109,7 +111,8 @@ cdef class VisionIpcClient:
109111 self .client = new cppVisionIpcClient(name, stream, conflate, NULL , NULL )
110112
111113 def __dealloc__ (self ):
112- del self .client
114+ with nogil:
115+ del self .client
113116
114117 @property
115118 def width (self ):
@@ -152,17 +155,28 @@ cdef class VisionIpcClient:
152155 return self .extra.valid
153156
154157 def recv (self , int timeout_ms = 100 ):
155- buf = self .client.recv(& self .extra, timeout_ms)
158+ cdef cppVisionBuf * buf
159+ with nogil:
160+ buf = self .client.recv(& self .extra, timeout_ms)
156161 if not buf:
157162 return None
158163 return VisionBuf.create(buf)
159164
160165 def connect (self , bool blocking ):
161- return self .client.connect(blocking)
166+ cdef bool result
167+ with nogil:
168+ result = self .client.connect(blocking)
169+ return result
162170
163171 def is_connected (self ):
164- return self .client.is_connected()
172+ cdef bool connected
173+ with nogil:
174+ connected = self .client.is_connected()
175+ return connected
165176
166177 @staticmethod
167178 def available_streams (string name , bool block ):
168- return cppVisionIpcClient.getAvailableStreams(name, block)
179+ cdef cpp_set[cppVisionStreamType] streams
180+ with nogil:
181+ streams = cppVisionIpcClient.getAvailableStreams(name, block)
182+ return streams
0 commit comments