Skip to content

Commit

Permalink
Split epoll_wait into blocking and non-blocking variants
Browse files Browse the repository at this point in the history
  • Loading branch information
djspiewak committed Jan 3, 2025
1 parent 53abc4d commit 22271cc
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions core/native/src/main/scala/cats/effect/unsafe/EpollSystem.scala
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,11 @@ object EpollSystem extends PollingSystem {
@tailrec
def processEvents(timeout: Int): Unit = {

val triggeredEvents = epoll_wait(epfd, events, MaxEvents, timeout)
val triggeredEvents =
if (timeout >= 0)
awaiting.epoll_wait(epfd, events, MaxEvents, timeout)
else
immediate.epoll_wait(epfd, events, MaxEvents, timeout)

if (triggeredEvents >= 0) {
polled = true
Expand Down Expand Up @@ -317,9 +321,18 @@ object EpollSystem extends PollingSystem {

def epoll_ctl(epfd: Int, op: Int, fd: Int, event: Ptr[epoll_event]): Int = extern

@blocking // TODO: create non-@blocking version
def epoll_wait(epfd: Int, events: Ptr[epoll_event], maxevents: Int, timeout: Int): Int =
extern
@extern
object awaiting {
@blocking
def epoll_wait(epfd: Int, events: Ptr[epoll_event], maxevents: Int, timeout: Int): Int =
extern
}

@extern
object immediate {
def epoll_wait(epfd: Int, events: Ptr[epoll_event], maxevents: Int, timeout: Int): Int =
extern
}
}

private object epollImplicits {
Expand Down

0 comments on commit 22271cc

Please sign in to comment.