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 89c862c
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 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,10 @@ 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 +320,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 89c862c

Please sign in to comment.