mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 19:05:52 +00:00
tcp: print error when we can't allocate a bucket.
event: Don't report eof if we have bytes to deliver still. Made a mistake moving statuses around. Requeue the request on STATUS_PENDING. svn path=/trunk/; revision=11016
This commit is contained in:
parent
e91d1416ab
commit
b0f758cf33
2 changed files with 14 additions and 4 deletions
|
@ -23,7 +23,8 @@ int TCPSocketState(void *ClientData,
|
|||
PTDI_BUCKET Bucket;
|
||||
PLIST_ENTRY Entry;
|
||||
|
||||
TI_DbgPrint(MID_TRACE,("Called: NewState %x\n", NewState));
|
||||
TI_DbgPrint(MID_TRACE,("Called: NewState %x (Conn %x)\n",
|
||||
NewState, Connection));
|
||||
|
||||
if( !Connection ) {
|
||||
TI_DbgPrint(MID_TRACE,("Socket closing.\n"));
|
||||
|
@ -44,6 +45,10 @@ int TCPSocketState(void *ClientData,
|
|||
ExFreePool( Bucket );
|
||||
}
|
||||
} else if( (NewState & SEL_READ) || (NewState & SEL_FIN) ) {
|
||||
TI_DbgPrint(MID_TRACE,("Readable (or closed): irp list %s\n",
|
||||
IsListEmpty(&Connection->ReceiveRequest) ?
|
||||
"empty" : "nonempty"));
|
||||
|
||||
while( !IsListEmpty( &Connection->ReceiveRequest ) ) {
|
||||
PIRP Irp;
|
||||
OSK_UINT RecvLen = 0, Received = 0;
|
||||
|
@ -70,7 +75,7 @@ int TCPSocketState(void *ClientData,
|
|||
TI_DbgPrint(MID_TRACE,
|
||||
("Reading %d bytes to %x\n", RecvLen, RecvBuffer));
|
||||
|
||||
if( NewState & SEL_FIN ) {
|
||||
if( NewState & SEL_FIN && !RecvLen ) {
|
||||
Status = STATUS_END_OF_FILE;
|
||||
Received = 0;
|
||||
} else
|
||||
|
@ -93,7 +98,7 @@ int TCPSocketState(void *ClientData,
|
|||
|
||||
Complete( Bucket->Request.RequestContext,
|
||||
STATUS_SUCCESS, Received );
|
||||
} else if( Status == STATUS_SUCCESS ) {
|
||||
} else if( Status == STATUS_PENDING ) {
|
||||
InsertHeadList( &Connection->ReceiveRequest,
|
||||
&Bucket->Entry );
|
||||
break;
|
||||
|
|
|
@ -310,11 +310,16 @@ NTSTATUS TCPReceiveData
|
|||
(Status == STATUS_SUCCESS && Received == 0) ) {
|
||||
/* Freed in TCPSocketState */
|
||||
Bucket = ExAllocatePool( NonPagedPool, sizeof(*Bucket) );
|
||||
if( !Bucket ) return STATUS_NO_MEMORY;
|
||||
if( !Bucket ) {
|
||||
TI_DbgPrint(MID_TRACE,("Failed to allocate bucket\n"));
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
Bucket->Request = *Request;
|
||||
*BytesReceived = 0;
|
||||
InsertHeadList( &Connection->ReceiveRequest, &Bucket->Entry );
|
||||
Status = STATUS_PENDING;
|
||||
TI_DbgPrint(MID_TRACE,("Queued read irp\n"));
|
||||
} else {
|
||||
TI_DbgPrint(MID_TRACE,("Got status %x, bytes %d\n", Status, Received));
|
||||
*BytesReceived = Received;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue