diff --git a/basis/io/backend/unix/multiplexers/epoll/epoll.factor b/basis/io/backend/unix/multiplexers/epoll/epoll.factor index 98c48c113d..11fa5620f2 100644 --- a/basis/io/backend/unix/multiplexers/epoll/epoll.factor +++ b/basis/io/backend/unix/multiplexers/epoll/epoll.factor @@ -1,6 +1,6 @@ -! Copyright (C) 2008 Slava Pestov. +! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien.c-types kernel destructors bit-arrays +USING: accessors classes.struct kernel destructors bit-arrays sequences assocs struct-arrays math namespaces locals fry unix unix.linux.epoll unix.time io.ports io.backend.unix io.backend.unix.multiplexers ; @@ -16,14 +16,14 @@ TUPLE: epoll-mx < mx events ; : ( -- mx ) epoll-mx new-mx max-events epoll_create dup io-error >>fd - max-events "epoll-event" >>events ; + max-events epoll-event >>events ; M: epoll-mx dispose* fd>> close-file ; : make-event ( fd events -- event ) - "epoll-event" - [ set-epoll-event-events ] keep - [ set-epoll-event-fd ] keep ; + epoll-event + swap >>events + swap >>fd ; :: do-epoll-ctl ( fd mx what events -- ) mx fd>> what fd fd events make-event epoll_ctl io-error ; @@ -55,7 +55,7 @@ M: epoll-mx remove-output-callbacks ( fd mx -- seq ) epoll_wait multiplexer-error ; : handle-event ( event mx -- ) - [ epoll-event-fd ] dip + [ fd>> ] dip [ EPOLLIN EPOLLOUT bitor do-epoll-del ] [ input-available ] [ output-available ] 2tri ; diff --git a/basis/unix/linux/epoll/epoll.factor b/basis/unix/linux/epoll/epoll.factor index 7c68dfa45a..966db32f60 100644 --- a/basis/unix/linux/epoll/epoll.factor +++ b/basis/unix/linux/epoll/epoll.factor @@ -1,16 +1,16 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. IN: unix.linux.epoll -USING: alien.syntax math ; +USING: alien.syntax classes.struct math ; FUNCTION: int epoll_create ( int size ) ; FUNCTION: int epoll_ctl ( int epfd, int op, int fd, epoll_event* event ) ; -C-STRUCT: epoll-event - { "uint" "events" } - { "uint" "fd" } - { "uint" "padding" } ; +STRUCT: epoll-event +{ events uint } +{ fd uint } +{ padding uint } ; FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ;