X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fvfs%2Fselect.c;h=d4c5cd8545d0300a3861b63a6c2911add54e88f2;hb=aa62597b70c3f3753ee21b174ca695b6b6c4cdef;hp=8bd0deba4dfe81a855a56c1b62e5d5c50e2889c7;hpb=26a5b6139d9f7f19a9900369f2f79697ffc0bade;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/vfs/select.c b/KernelLand/Kernel/vfs/select.c index 8bd0deba..d4c5cd85 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); } @@ -113,6 +112,7 @@ int VFS_SelectNode(tVFS_Node *Node, int TypeFlags, tTime *Timeout, const char *N if( !(TypeFlags & (1 << type)) ) continue; VFS_int_Select_GetType(type, Node, &list, &flag, &wanted, &maxAllowed); LOG("VFS_int_Select_RemThread()"); + ASSERT(*list); VFS_int_Select_RemThread(*list, thisthread); ret = ret || *flag == wanted; } @@ -165,7 +165,7 @@ int VFS_Select(int MaxHandle, fd_set *ReadHandles, fd_set *WriteHandles, fd_set { LOG("Semaphore_Wait()"); // TODO: Actual timeout - Threads_WaitEvents( THREAD_EVENT_VFS|ExtraEvents ); + Threads_WaitEvents( THREAD_EVENT_VFS|THREAD_EVENT_SIGNAL|ExtraEvents ); } else if( *Timeout > 0 ) { @@ -446,7 +446,6 @@ int VFS_int_Select_AddThread(tVFS_SelectList *List, tThread *Thread, int MaxAllo void VFS_int_Select_RemThread(tVFS_SelectList *List, tThread *Thread) { - int i; tVFS_SelectListEnt *block, *prev = NULL; ENTER("pList pThread", List, Thread); @@ -459,7 +458,7 @@ void VFS_int_Select_RemThread(tVFS_SelectList *List, tThread *Thread) // Look for the thread do { - for( i = 0; i < NUM_THREADS_PER_ALLOC; i ++ ) + for( int i = 0; i < NUM_THREADS_PER_ALLOC; i ++ ) { if( block->Threads[i] == Thread ) {