]> git.proxmox.com Git - mirror_edk2.git/blobdiff - StdLib/EfiSocketLib/DxeSupport.c
Fixed close for socket to properly release the socket context structure and the handle.
[mirror_edk2.git] / StdLib / EfiSocketLib / DxeSupport.c
index 284fa9cdfebc79be91e1d4f8d4f062d84fe7db78..808b710d27467fe908a8d8c381e65f91458fd4fa 100644 (file)
@@ -91,11 +91,8 @@ EslDxeDestroyChild (
   )\r
 {\r
   ESL_LAYER * pLayer;\r
-  ESL_SOCKET * pSocket;\r
-  ESL_SOCKET * pSocketPrevious;\r
   EFI_SOCKET_PROTOCOL * pSocketProtocol;\r
   EFI_STATUS Status;\r
-  EFI_TPL TplPrevious;\r
 \r
   DBG_ENTER ( );\r
 \r
@@ -112,101 +109,10 @@ EslDxeDestroyChild (
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
   if ( !EFI_ERROR ( Status )) {\r
-    pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );\r
-\r
-    //\r
-    //  Synchronize with the socket layer\r
-    //\r
-    RAISE_TPL ( TplPrevious, TPL_SOCKETS );\r
-\r
-    //\r
-    //  Walk the socket list\r
-    //\r
-    pSocketPrevious = pLayer->pSocketList;\r
-    if ( NULL != pSocketPrevious ) {\r
-      if ( pSocket == pSocketPrevious ) {\r
-        //\r
-        //  Remove the socket from the head of the list\r
-        //\r
-        pLayer->pSocketList = pSocket->pNext;\r
-      }\r
-      else {\r
-        //\r
-        //  Find the socket in the middle of the list\r
-        //\r
-        while (( NULL != pSocketPrevious )\r
-          && ( pSocket != pSocketPrevious->pNext )) {\r
-          //\r
-          //  Set the next socket\r
-          //\r
-          pSocketPrevious = pSocketPrevious->pNext;\r
-        }\r
-        if ( NULL != pSocketPrevious ) {\r
-          //\r
-          //  Remove the socket from the middle of the list\r
-          //\r
-          pSocketPrevious = pSocket->pNext;\r
-        }\r
-      }\r
-    }\r
-    else {\r
-      DEBUG (( DEBUG_ERROR | DEBUG_POOL,\r
-                "ERROR - Socket list is empty!\r\n" ));\r
-    }\r
-\r
-    //\r
-    //  Release the socket layer synchronization\r
-    //\r
-    RESTORE_TPL ( TplPrevious );\r
-\r
     //\r
-    //  Determine if the socket was found\r
+    //  Free the socket resources\r
     //\r
-    if ( NULL != pSocketPrevious ) {\r
-      pSocket->pNext = NULL;\r
-\r
-      //\r
-      //  Remove the socket protocol\r
-      //\r
-      Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                ChildHandle,\r
-                &gEfiSocketProtocolGuid,\r
-                &pSocket->SocketProtocol,\r
-                NULL );\r
-      if ( !EFI_ERROR ( Status )) {\r
-        DEBUG (( DEBUG_POOL | DEBUG_INFO,\r
-                    "Removed:   gEfiSocketProtocolGuid from 0x%08x\r\n",\r
-                    ChildHandle ));\r
-\r
-        //\r
-        //  Free the socket structure\r
-        //\r
-        Status = gBS->FreePool ( pSocket );\r
-        if ( !EFI_ERROR ( Status )) {\r
-          DEBUG (( DEBUG_POOL,\r
-                    "0x%08x: Free pSocket, %d bytes\r\n",\r
-                    pSocket,\r
-                    sizeof ( *pSocket )));\r
-        }\r
-        else {\r
-          DEBUG (( DEBUG_ERROR | DEBUG_POOL,\r
-                    "ERROR - Failed to free pSocket 0x%08x, Status: %r\r\n",\r
-                    pSocket,\r
-                    Status ));\r
-        }\r
-      }\r
-      else {\r
-        DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INFO,\r
-                    "ERROR - Failed to remove gEfiSocketProtocolGuid from 0x%08x, Status: %r\r\n",\r
-                    ChildHandle,\r
-                    Status ));\r
-      }\r
-    }\r
-    else {\r
-      DEBUG (( DEBUG_ERROR | DEBUG_INFO,\r
-                "ERROR - The socket was not in the socket list!\r\n" ));\r
-      Status = EFI_NOT_FOUND;\r
-    }\r
+    Status = EslSocketFree ( pSocketProtocol, NULL );\r
   }\r
   else {\r
     DEBUG (( DEBUG_ERROR,\r