return 0;
}
-int TCPSleep( void *ClientData, void *token, int priority, char *msg,
- int tmio ) {
- PSLEEPING_THREAD SleepingThread;
- LARGE_INTEGER Timeout;
-
- ASSERT_LOCKED(&TCPLock);
-
- TI_DbgPrint(DEBUG_TCP,
- ("Called TSLEEP: tok = %x, pri = %d, wmesg = %s, tmio = %x\n",
- token, priority, msg, tmio));
-
- SleepingThread = exAllocatePool( NonPagedPool, sizeof( *SleepingThread ) );
- if( SleepingThread ) {
- KeInitializeEvent( &SleepingThread->Event, NotificationEvent, FALSE );
- SleepingThread->SleepToken = token;
-
- /* We're going to sleep and need to release the lock, otherwise
- it's impossible to re-enter oskittcp to deliver the event that's
- going to wake us */
- TcpipRecursiveMutexLeave( &TCPLock );
-
- TcpipAcquireFastMutex( &SleepingThreadsLock );
- InsertTailList( &SleepingThreadsList, &SleepingThread->Entry );
- TcpipReleaseFastMutex( &SleepingThreadsLock );
-
- Timeout.QuadPart = Int32x32To64(tmio, -10000);
-
- TI_DbgPrint(DEBUG_TCP,("Waiting on %x\n", token));
- KeWaitForSingleObject( &SleepingThread->Event,
- Executive,
- KernelMode,
- TRUE,
- (tmio != 0) ? &Timeout : NULL );
-
- TcpipAcquireFastMutex( &SleepingThreadsLock );
- RemoveEntryList( &SleepingThread->Entry );
- TcpipReleaseFastMutex( &SleepingThreadsLock );
-
- TcpipRecursiveMutexEnter( &TCPLock, TRUE );
-
- exFreePool( SleepingThread );
- } else
- return OSK_ENOBUFS;
-
- TI_DbgPrint(DEBUG_TCP,("Waiting finished: %x\n", token));
- return 0;
-}
-
-void TCPWakeup( void *ClientData, void *token ) {
- PLIST_ENTRY Entry;
- PSLEEPING_THREAD SleepingThread;
-
- ASSERT_LOCKED(&TCPLock);
-
- TcpipAcquireFastMutex( &SleepingThreadsLock );
- Entry = SleepingThreadsList.Flink;
- while( Entry != &SleepingThreadsList ) {
- SleepingThread = CONTAINING_RECORD(Entry, SLEEPING_THREAD, Entry);
- TI_DbgPrint(DEBUG_TCP,("Sleeper @ %x\n", SleepingThread));
- if( SleepingThread->SleepToken == token ) {
- TI_DbgPrint(DEBUG_TCP,("Setting event to wake %x\n", token));
- KeSetEvent( &SleepingThread->Event, IO_NETWORK_INCREMENT, FALSE );
- }
- Entry = Entry->Flink;
- }
- TcpipReleaseFastMutex( &SleepingThreadsLock );
-}
-
/* Memory management routines
*
* By far the most requests for memory are either for 128 or 2048 byte blocks,