From b98e10acc1b060867d3c4393708cbca1853b9f67 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Sun, 9 Mar 2025 12:28:08 +0800 Subject: [PATCH] pandad_api_impl: add nogil to can_list_to_can_capnp (#34823) add nogil to can_list_to_can_capnp --- selfdrive/pandad/pandad_api_impl.pyx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx index e571c4aa58..6683b843ae 100644 --- a/selfdrive/pandad/pandad_api_impl.pyx +++ b/selfdrive/pandad/pandad_api_impl.pyx @@ -17,14 +17,17 @@ cdef extern from "opendbc/can/common.h": vector[CanFrame] frames cdef extern from "can_list_to_can_capnp.cc": - void can_list_to_can_capnp_cpp(const vector[CanFrame] &can_list, string &out, bool sendcan, bool valid) + void can_list_to_can_capnp_cpp(const vector[CanFrame] &can_list, string &out, bool sendcan, bool valid) nogil void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan) def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): cdef CanFrame *f cdef vector[CanFrame] can_list + cdef uint32_t cpp_can_msgs_len = len(can_msgs) + + with nogil: + can_list.reserve(cpp_can_msgs_len) - can_list.reserve(len(can_msgs)) for can_msg in can_msgs: f = &(can_list.emplace_back()) f.address = can_msg[0] @@ -32,7 +35,10 @@ def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): f.src = can_msg[2] cdef string out - can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid) + cdef bool is_sendcan = (msgtype == 'sendcan') + cdef bool is_valid = valid + with nogil: + can_list_to_can_capnp_cpp(can_list, out, is_sendcan, is_valid) return out def can_capnp_to_list(strings, msgtype='can'):