diff --git a/messaging/event.cc b/messaging/event.cc index f7e343b..a708de9 100644 --- a/messaging/event.cc +++ b/messaging/event.cc @@ -6,16 +6,18 @@ #include #include -#include -#include -#include #include #include #include #include +#include +#include #include "cereal/messaging/event.h" +#ifndef __APPLE__ +#include + void event_state_shm_mmap(std::string endpoint, std::string identifier, char **shm_mem, std::string *shm_path) { const char* op_prefix = std::getenv("OPENPILOT_PREFIX"); @@ -136,8 +138,7 @@ void Event::wait(int timeout_sec) const { int event_count; struct pollfd fds = { this->event_fd, POLLIN, 0 }; - - struct timespec timeout = { timeout_sec, 0 }; + struct timespec timeout = { timeout_sec, 0 };; sigset_t signals; sigfillset(&signals); @@ -159,6 +160,7 @@ bool Event::peek() const { throw_if_invalid(); int event_count; + struct pollfd fds = { this->event_fd, POLLIN, 0 }; // poll with timeout zero to return status immediately @@ -206,3 +208,29 @@ int Event::wait_for_one(const std::vector& events, int timeout_sec) { throw std::runtime_error("Event poll failed, no events ready"); } +#else +// Stub implementation for Darwin, which does not support eventfd +void event_state_shm_mmap(std::string endpoint, std::string identifier, char **shm_mem, std::string *shm_path) {} + +SocketEventHandle::SocketEventHandle(std::string endpoint, std::string identifier, bool override) { + std::cerr << "SocketEventHandle not supported on macOS" << std::endl; + assert(false); +} +SocketEventHandle::~SocketEventHandle() {} +bool SocketEventHandle::is_enabled() { return this->state->enabled; } +void SocketEventHandle::set_enabled(bool enabled) {} +Event SocketEventHandle::recv_called() { return Event(); } +Event SocketEventHandle::recv_ready() { return Event(); } +void SocketEventHandle::toggle_fake_events(bool enabled) {} +void SocketEventHandle::set_fake_prefix(std::string prefix) {} +std::string SocketEventHandle::fake_prefix() { return ""; } + +Event::Event(int fd): event_fd(fd) {} +void Event::set() const {} +int Event::clear() const { return 0; } +void Event::wait(int timeout_sec) const {} +bool Event::peek() const { return false; } +bool Event::is_valid() const { return false; } +int Event::fd() const { return this->event_fd; } +int Event::wait_for_one(const std::vector& events, int timeout_sec) { return -1; } +#endif diff --git a/messaging/tests/test_fake.py b/messaging/tests/test_fake.py index 08c8fc7..31191b4 100644 --- a/messaging/tests/test_fake.py +++ b/messaging/tests/test_fake.py @@ -1,6 +1,7 @@ import os import unittest import multiprocessing +import platform from parameterized import parameterized_class import cereal.messaging as messaging @@ -8,6 +9,7 @@ import cereal.messaging as messaging WAIT_TIMEOUT = 5 +@unittest.skipIf(platform.system() == "Darwin", "Events not supported on macOS") class TestEvents(unittest.TestCase): def test_mutation(self): @@ -61,6 +63,7 @@ class TestEvents(unittest.TestCase): self.assertFalse(event.peek()) +@unittest.skipIf(platform.system() == "Darwin", "FakeSockets not supported on macOS") @unittest.skipIf("ZMQ" in os.environ, "FakeSockets not supported on ZMQ") @parameterized_class([{"prefix": None}, {"prefix": "test"}]) class TestFakeSockets(unittest.TestCase):