X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FIPStack%2Ftcp.c;h=c10213c9145d35906c65fb553a6e553e4f5cac01;hb=4ddb4999e2ec2de02a40085ad75f43c92a220f21;hp=8d954bc91d4375f5f7bba93abd8296d99ab2b9a1;hpb=2a49f5a6be4fd478ae4249115ff2a3bf0e34d7e5;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/IPStack/tcp.c b/KernelLand/Modules/IPStack/tcp.c index 8d954bc9..c10213c9 100644 --- a/KernelLand/Modules/IPStack/tcp.c +++ b/KernelLand/Modules/IPStack/tcp.c @@ -1084,6 +1084,7 @@ tVFS_Node *TCP_Client_Init(tInterface *Interface) conn->LocalPort = -1; conn->RemotePort = -1; + conn->Node.ReferenceCount = 1; conn->Node.ImplPtr = conn; conn->Node.NumACLs = 1; conn->Node.ACLs = &gVFS_ACL_EveryoneRW; @@ -1367,6 +1368,15 @@ void TCP_Client_Close(tVFS_Node *Node) ENTER("pNode", Node); + ASSERT(Node->ReferenceCount != 0); + + if( Node->ReferenceCount > 1 ) { + Node->ReferenceCount --; + LOG("Dereference only"); + LEAVE('-'); + return ; + } + if( conn->State == TCP_ST_CLOSE_WAIT || conn->State == TCP_ST_OPEN ) { packet.SourcePort = htons(conn->LocalPort); @@ -1383,6 +1393,9 @@ void TCP_Client_Close(tVFS_Node *Node) switch( conn->State ) { + case TCP_ST_CLOSED: + Log_Warning("TCP", "Closing connection that was never opened"); + break; case TCP_ST_CLOSE_WAIT: conn->State = TCP_ST_LAST_ACK; break;