X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fvfs%2Fselect.c;h=e2be46afd00969e144d3a9d2616d6cf2a62c8235;hb=f99f0ec855b82620c45b4c539ef7d3832680db0d;hp=b52414f07f3ce8375b5a8d701872187bdf51b675;hpb=79c17683913c5ebd7195714affa5567b69a66712;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/vfs/select.c b/KernelLand/Kernel/vfs/select.c index b52414f0..e2be46af 100644 --- a/KernelLand/Kernel/vfs/select.c +++ b/KernelLand/Kernel/vfs/select.c @@ -5,7 +5,6 @@ * select.c * - Implements the select() system call (and supporting code) * - * TODO: Implment timeouts (via an alarm event?) * TODO: Remove malloc for read/write queues */ #define DEBUG 0 @@ -89,7 +88,7 @@ int VFS_SelectNode(tVFS_Node *Node, int TypeFlags, tTime *Timeout, const char *N { LOG("Semaphore_Wait()"); // TODO: Actual timeout - Threads_WaitEvents( THREAD_EVENT_VFS ); + Threads_WaitEvents( THREAD_EVENT_VFS|THREAD_EVENT_SIGNAL ); } else if( *Timeout > 0 ) { @@ -100,7 +99,7 @@ int VFS_SelectNode(tVFS_Node *Node, int TypeFlags, tTime *Timeout, const char *N LOG("Timeout %lli ms", *Timeout); Time_ScheduleTimer( t, *Timeout ); // Wait for the timer or a VFS event - Threads_WaitEvents( THREAD_EVENT_VFS|THREAD_EVENT_TIMER ); + Threads_WaitEvents( THREAD_EVENT_VFS|THREAD_EVENT_TIMER|THREAD_EVENT_SIGNAL ); Time_FreeTimer(t); } @@ -164,9 +163,9 @@ int VFS_Select(int MaxHandle, fd_set *ReadHandles, fd_set *WriteHandles, fd_set // Wait for things if( !Timeout ) { - LOG("Semaphore_Wait()"); + LOG("Waiting for VFS/SIGNAL events (Plus 0x%x)", ExtraEvents); // TODO: Actual timeout - Threads_WaitEvents( THREAD_EVENT_VFS|ExtraEvents ); + Threads_WaitEvents( THREAD_EVENT_VFS|THREAD_EVENT_SIGNAL|ExtraEvents ); } else if( *Timeout > 0 ) { @@ -181,6 +180,7 @@ int VFS_Select(int MaxHandle, fd_set *ReadHandles, fd_set *WriteHandles, fd_set Time_FreeTimer(t); } // Fill output (modify *Handles) + LOG("De-registering"); // - Also, de-register ret = VFS_int_Select_Deregister(thisthread, MaxHandle, ReadHandles, 0, IsKernel); ret += VFS_int_Select_Deregister(thisthread, MaxHandle, WriteHandles, 1, IsKernel);