OSK_UINT FindType,
OSK_SOCKADDR *ReqAddr );
+NTSTATUS TCPMemStartup( void );
void *TCPMalloc( void *ClientData,
OSK_UINT bytes, OSK_PCHAR file, OSK_UINT line );
void TCPFree( void *ClientData,
void *data, OSK_PCHAR file, OSK_UINT line );
+void TCPMemShutdown( void );
int TCPSleep( void *ClientData, void *token, int priority, char *msg,
int tmio );
* Status of operation
*/
{
+ NTSTATUS Status;
+
TcpipRecursiveMutexInit( &TCPLock );
ExInitializeFastMutex( &SleepingThreadsLock );
InitializeListHead( &SleepingThreadsList );
InitializeListHead( &SignalledConnections );
+ Status = TCPMemStartup();
+ if ( ! NT_SUCCESS(Status) ) {
+ return Status;
+ }
PortsStartup( &TCPPorts, 1, 0xfffe );
return STATUS_SUCCESS;
WaitForThread.QuadPart = -2500000; /* 250 ms */
- KeSetEvent(&TimerLoopEvent, IO_NO_INCREMENT, TRUE);
- KeWaitForSingleObject(&TimerThreadHandle, Executive, KernelMode,
- FALSE, &WaitForThread);
+ KeSetEvent(&TimerLoopEvent, IO_NO_INCREMENT, FALSE);
+ ZwWaitForSingleObject(TimerThreadHandle, FALSE, &WaitForThread);
/* Deregister this protocol with IP layer */
IPRegisterProtocol(IPPROTO_TCP, NULL);
PortsShutdown( &TCPPorts );
+ TCPMemShutdown();
+
return STATUS_SUCCESS;
}