Comments inline.
On 2016-07-05 20:35, zhu(a)svn.reactos.org wrote:
---
branches/GSoC_2016/lwIP-tcpip/drivers/network/tcpip/address.c [iso-8859-1] (original)
+++ branches/GSoC_2016/lwIP-tcpip/drivers/network/tcpip/address.c [iso-8859-1] Tue Jul 5
18:35:17 2016
@@ -357,15 +356,15 @@
KeReleaseSpinLockFromDpcLevel(&Context->RequestListLock);
- if (Context->lwip_tcp_pcb != Context->AddressFile->lwip_tcp_pcb)
+ if (Context->lwip_tcp_pcb == Context->AddressFile->lwip_tcp_pcb);
You really don't want a semicolon here ;)
{
- tcp_close(Context->lwip_tcp_pcb);
+ Context->AddressFile->lwip_tcp_pcb = NULL;
}
+ if (!p)
+ {
+ CopiedLength = 0;
+ Status = STATUS_ADDRESS_CLOSED;
+ goto BAD;
+ }
if (RemainingDestBytes <= p->len)
{
RtlCopyMemory(CurrentDestLocation, p->payload, RemainingDestBytes);
CopiedLength = RemainingDestBytes;
+ Status = STATUS_SUCCESS;
goto RETURN;
We normally call labels things like "Exit" and "Failure".
@@ -826,23 +846,24 @@
tcp_recved(tpcb, CopiedLength);
I find it confusing not to have Entry = Head->Flink right here. I'm not
sure where it is, but unless there's a good reason for it to be
somewhere else I'd recommend putting it right in front of the loop.
+ while (Entry != Head)
+ {
+ Request = CONTAINING_RECORD(Entry, TCP_REQUEST, ListEntry);
Entry = Entry->Flink? ;)
+ if (Request->PendingMode ==
TCP_REQUEST_PENDING_RECEIVE)
+ {
+ tcp_recv(tpcb, lwip_tcp_receive_callback);
+ break;
+ }
+ }
@@ -1666,6 +1690,21 @@
if (!(IsListEmpty(&Context->RequestListHead)))
{
DPRINT1("Disassociating context with outstanding requests\n");
+ Head = &Context->RequestListHead;
+ Entry = Head->Flink;
+ while (Entry != Head)
+ {
+ Request = CONTAINING_RECORD(Entry, TCP_REQUEST, ListEntry);
Entry = Entry->Flink;
+ if (Request->PendingIrp)
+ {
+ IrpSp = IoGetCurrentIrpStackLocation(Request->PendingIrp);
+ DPRINT1("Pending IRP Control Code: %08x\n", IrpSp->MinorFunction);
+ }
+ else
+ {
+ DPRINT1("IRP is NULL\n");
+ }
+ }
}
KeReleaseSpinLockFromDpcLevel(&Context->RequestListLock);
Thanks.
-Thomas