]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/Ip4Dxe: Cleanup the resource after error happen during Ip4StartAutoConfig().
authorJiaxin Wu <jiaxin.wu@intel.com>
Tue, 5 Dec 2017 06:23:39 +0000 (14:23 +0800)
committerJiaxin Wu <jiaxin.wu@intel.com>
Wed, 13 Dec 2017 08:25:40 +0000 (16:25 +0800)
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Wang Fan <fan.wang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c

index 26530e3a2bd81b2564575d74503f69dd8241cd90..f2640b7aa9a3c4888f4eaeee655e13a918143025 100644 (file)
@@ -917,7 +917,6 @@ Ip4StartAutoConfig (
   IP4_CONFIG2_DHCP4_OPTION       ParaList;\r
   EFI_STATUS                     Status;\r
  \r
-\r
   IpSb = IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE (Instance);\r
 \r
   if (IpSb->State > IP4_SERVICE_UNSTARTED) {\r
@@ -970,8 +969,18 @@ Ip4StartAutoConfig (
                   IpSb->Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (EFI_ERROR (Status)) {\r
+    NetLibDestroyServiceChild (\r
+      IpSb->Controller,\r
+      IpSb->Image,\r
+      &gEfiDhcp4ServiceBindingProtocolGuid,\r
+      Instance->Dhcp4Handle\r
+      );\r
 \r
+    Instance->Dhcp4Handle = NULL;\r
+    \r
+    return Status;\r
+  }\r
 \r
   //\r
   // Check the current DHCP status, if the DHCP process has\r
@@ -979,11 +988,10 @@ Ip4StartAutoConfig (
   //\r
   Dhcp4  = Instance->Dhcp4;\r
   Status = Dhcp4->GetModeData (Dhcp4, &Dhcp4Mode);\r
-\r
   if (Dhcp4Mode.State == Dhcp4Bound) {\r
     Ip4Config2OnDhcp4Complete (NULL, Instance);\r
+    \r
     return EFI_SUCCESS;\r
-\r
   }\r
 \r
   //\r
@@ -1001,8 +1009,25 @@ Ip4StartAutoConfig (
   Dhcp4Mode.ConfigData.OptionList  = OptionList;\r
 \r
   Status = Dhcp4->Configure (Dhcp4, &Dhcp4Mode.ConfigData);\r
-\r
   if (EFI_ERROR (Status)) {\r
+    gBS->CloseProtocol (\r
+           Instance->Dhcp4Handle,\r
+           &gEfiDhcp4ProtocolGuid,\r
+           IpSb->Image,\r
+           IpSb->Controller\r
+           );\r
+\r
+    NetLibDestroyServiceChild (\r
+      IpSb->Controller,\r
+      IpSb->Image,\r
+      &gEfiDhcp4ServiceBindingProtocolGuid,\r
+      Instance->Dhcp4Handle\r
+      );\r
+    \r
+    Instance->Dhcp4 = NULL;\r
+    \r
+    Instance->Dhcp4Handle = NULL;\r
+    \r
     return Status;\r
   }\r
   \r
@@ -1016,21 +1041,24 @@ Ip4StartAutoConfig (
                   Instance,\r
                   &Instance->Dhcp4Event\r
                   );\r
-\r
   if (EFI_ERROR (Status)) {\r
+    Ip4Config2DestroyDhcp4 (Instance);\r
     return Status;\r
   }\r
 \r
   Status = Dhcp4->Start (Dhcp4, Instance->Dhcp4Event);\r
-\r
   if (EFI_ERROR (Status)) {\r
+    Ip4Config2DestroyDhcp4 (Instance);\r
+    gBS->CloseEvent (Instance->Dhcp4Event);\r
+    Instance->Dhcp4Event = NULL;\r
+    \r
     return Status;\r
   }\r
  \r
-  IpSb->State     = IP4_SERVICE_STARTED;\r
+  IpSb->State = IP4_SERVICE_STARTED;\r
   DispatchDpc ();\r
+  \r
   return EFI_SUCCESS;\r
-\r
 }\r
 \r
 \r