Skip to content

Commit b511e65

Browse files
committed
fixed incorrect kqueue executor implementation
a) can't combine filters (like `| EVFILT_VNODE`) b) wrong `EV_CLEAR` usage c) wrong `NOTE_xxx` usage
1 parent 45481f3 commit b511e65

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

include/ocvsmd/platform/bsd/kqueue_single_threaded_executor.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
185185
AwaitableNode(Self& executor, Callback::Function&& function)
186186
: CallbackNode{executor, std::move(function)}
187187
, fd_{-1}
188-
, events_{0}
188+
, filter_{0}
189189
{
190190
}
191191

@@ -194,7 +194,7 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
194194
if (fd_ >= 0)
195195
{
196196
KEvent ev{};
197-
EV_SET(&ev, fd_, events_, EV_DELETE, NOTE_DELETE, 0, 0);
197+
EV_SET(&ev, fd_, filter_, EV_DELETE, 0, 0, 0);
198198
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
199199
getExecutor().total_awaitables_--;
200200
}
@@ -203,14 +203,14 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
203203
AwaitableNode(AwaitableNode&& other) noexcept
204204
: CallbackNode(std::move(static_cast<CallbackNode&&>(other)))
205205
, fd_{std::exchange(other.fd_, -1)}
206-
, events_{std::exchange(other.events_, 0)}
206+
, filter_{std::exchange(other.filter_, 0)}
207207
{
208208
if (fd_ >= 0)
209209
{
210210
KEvent ev{};
211-
EV_SET(&ev, fd_, events_, EV_DELETE, NOTE_DELETE, 0, 0);
211+
EV_SET(&ev, fd_, filter_, EV_DELETE, 0, 0, 0);
212212
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
213-
EV_SET(&ev, fd_, events_, EV_ADD | EV_CLEAR, NOTE_WRITE, 0, this);
213+
EV_SET(&ev, fd_, filter_, EV_ADD, 0, 0, this);
214214
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
215215
}
216216
}
@@ -224,22 +224,22 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
224224
return fd_;
225225
}
226226

227-
std::uint32_t events() const noexcept
227+
std::int16_t filter() const noexcept
228228
{
229-
return events_;
229+
return filter_;
230230
}
231231

232-
void setup(const int fd, const std::uint32_t events) noexcept
232+
void setup(const int fd, const std::int16_t filter) noexcept
233233
{
234234
CETL_DEBUG_ASSERT(fd >= 0, "");
235-
CETL_DEBUG_ASSERT(events != 0, "");
235+
CETL_DEBUG_ASSERT(filter != 0, "");
236236

237237
fd_ = fd;
238-
events_ = events | EVFILT_VNODE;
238+
filter_ = filter;
239239

240240
getExecutor().total_awaitables_++;
241241
KEvent ev{};
242-
EV_SET(&ev, fd, events_, EV_ADD | EV_CLEAR, NOTE_WRITE, 0, this);
242+
EV_SET(&ev, fd, filter_, EV_ADD, 0, 0, this);
243243
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
244244
}
245245

@@ -253,8 +253,8 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
253253

254254
// MARK: Data members:
255255

256-
int fd_;
257-
std::uint32_t events_;
256+
int fd_;
257+
std::int16_t filter_;
258258

259259
}; // AwaitableNode
260260

0 commit comments

Comments
 (0)