diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 9c8f6ebac7..d85aa00661 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -531,8 +531,8 @@ void can_send(cereal::Event::Reader &event) { //Older than 1 second. Dont send. return; } - - auto can_data_list = event.getSendcan(); + + auto can_data_list = event.getSendcan(); int msg_count = can_data_list.size(); uint32_t *send = (uint32_t*)malloc(msg_count*0x10); @@ -586,20 +586,26 @@ void *can_send_thread(void *crap) { Context * context = Context::create(); SubSocket * subscriber = SubSocket::create(context, "sendcan"); assert(subscriber != NULL); + subscriber->setTimeout(100); // run as fast as messages come in while (!do_exit) { Message * msg = subscriber->receive(); - if (msg){ - auto amsg = kj::heapArray((msg->getSize() / sizeof(capnp::word)) + 1); - memcpy(amsg.begin(), msg->getData(), msg->getSize()); - - capnp::FlatArrayMessageReader cmsg(amsg); - cereal::Event::Reader event = cmsg.getRoot(); - can_send(event); - delete msg; + if (!msg){ + if (errno == EINTR) { + do_exit = true; + } + continue; } + + auto amsg = kj::heapArray((msg->getSize() / sizeof(capnp::word)) + 1); + memcpy(amsg.begin(), msg->getData(), msg->getSize()); + + capnp::FlatArrayMessageReader cmsg(amsg); + cereal::Event::Reader event = cmsg.getRoot(); + can_send(event); + delete msg; } delete subscriber; diff --git a/selfdrive/locationd/ubloxd_main.cc b/selfdrive/locationd/ubloxd_main.cc index 8e6007a75c..b0b5bcd08c 100644 --- a/selfdrive/locationd/ubloxd_main.cc +++ b/selfdrive/locationd/ubloxd_main.cc @@ -37,12 +37,16 @@ int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func) Context * context = Context::create(); SubSocket * subscriber = SubSocket::create(context, "ubloxRaw"); assert(subscriber != NULL); + subscriber->setTimeout(100); PubMaster pm({"ubloxGnss", "gpsLocationExternal"}); while (!do_exit) { Message * msg = subscriber->receive(); if (!msg){ + if (errno == EINTR) { + do_exit = true; + } continue; }