mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 10:22:59 +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;
|
PTDI_BUCKET Bucket;
|
||||||
PLIST_ENTRY Entry;
|
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 ) {
|
if( !Connection ) {
|
||||||
TI_DbgPrint(MID_TRACE,("Socket closing.\n"));
|
TI_DbgPrint(MID_TRACE,("Socket closing.\n"));
|
||||||
|
@ -44,6 +45,10 @@ int TCPSocketState(void *ClientData,
|
||||||
ExFreePool( Bucket );
|
ExFreePool( Bucket );
|
||||||
}
|
}
|
||||||
} else if( (NewState & SEL_READ) || (NewState & SEL_FIN) ) {
|
} 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 ) ) {
|
while( !IsListEmpty( &Connection->ReceiveRequest ) ) {
|
||||||
PIRP Irp;
|
PIRP Irp;
|
||||||
OSK_UINT RecvLen = 0, Received = 0;
|
OSK_UINT RecvLen = 0, Received = 0;
|
||||||
|
@ -70,7 +75,7 @@ int TCPSocketState(void *ClientData,
|
||||||
TI_DbgPrint(MID_TRACE,
|
TI_DbgPrint(MID_TRACE,
|
||||||
("Reading %d bytes to %x\n", RecvLen, RecvBuffer));
|
("Reading %d bytes to %x\n", RecvLen, RecvBuffer));
|
||||||
|
|
||||||
if( NewState & SEL_FIN ) {
|
if( NewState & SEL_FIN && !RecvLen ) {
|
||||||
Status = STATUS_END_OF_FILE;
|
Status = STATUS_END_OF_FILE;
|
||||||
Received = 0;
|
Received = 0;
|
||||||
} else
|
} else
|
||||||
|
@ -93,7 +98,7 @@ int TCPSocketState(void *ClientData,
|
||||||
|
|
||||||
Complete( Bucket->Request.RequestContext,
|
Complete( Bucket->Request.RequestContext,
|
||||||
STATUS_SUCCESS, Received );
|
STATUS_SUCCESS, Received );
|
||||||
} else if( Status == STATUS_SUCCESS ) {
|
} else if( Status == STATUS_PENDING ) {
|
||||||
InsertHeadList( &Connection->ReceiveRequest,
|
InsertHeadList( &Connection->ReceiveRequest,
|
||||||
&Bucket->Entry );
|
&Bucket->Entry );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -310,11 +310,16 @@ NTSTATUS TCPReceiveData
|
||||||
(Status == STATUS_SUCCESS && Received == 0) ) {
|
(Status == STATUS_SUCCESS && Received == 0) ) {
|
||||||
/* Freed in TCPSocketState */
|
/* Freed in TCPSocketState */
|
||||||
Bucket = ExAllocatePool( NonPagedPool, sizeof(*Bucket) );
|
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;
|
Bucket->Request = *Request;
|
||||||
|
*BytesReceived = 0;
|
||||||
InsertHeadList( &Connection->ReceiveRequest, &Bucket->Entry );
|
InsertHeadList( &Connection->ReceiveRequest, &Bucket->Entry );
|
||||||
Status = STATUS_PENDING;
|
Status = STATUS_PENDING;
|
||||||
|
TI_DbgPrint(MID_TRACE,("Queued read irp\n"));
|
||||||
} else {
|
} else {
|
||||||
TI_DbgPrint(MID_TRACE,("Got status %x, bytes %d\n", Status, Received));
|
TI_DbgPrint(MID_TRACE,("Got status %x, bytes %d\n", Status, Received));
|
||||||
*BytesReceived = Received;
|
*BytesReceived = Received;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue