mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/Ip4Dxe: Cleanup the resource after error happen during Ip4StartAutoConfig().
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>
This commit is contained in:
parent
3fe97d9459
commit
f3b108a8ef
|
@ -917,7 +917,6 @@ Ip4StartAutoConfig (
|
|||
IP4_CONFIG2_DHCP4_OPTION ParaList;
|
||||
EFI_STATUS Status;
|
||||
|
||||
|
||||
IpSb = IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE (Instance);
|
||||
|
||||
if (IpSb->State > IP4_SERVICE_UNSTARTED) {
|
||||
|
@ -970,8 +969,18 @@ Ip4StartAutoConfig (
|
|||
IpSb->Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
if (EFI_ERROR (Status)) {
|
||||
NetLibDestroyServiceChild (
|
||||
IpSb->Controller,
|
||||
IpSb->Image,
|
||||
&gEfiDhcp4ServiceBindingProtocolGuid,
|
||||
Instance->Dhcp4Handle
|
||||
);
|
||||
|
||||
Instance->Dhcp4Handle = NULL;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Check the current DHCP status, if the DHCP process has
|
||||
|
@ -979,11 +988,10 @@ Ip4StartAutoConfig (
|
|||
//
|
||||
Dhcp4 = Instance->Dhcp4;
|
||||
Status = Dhcp4->GetModeData (Dhcp4, &Dhcp4Mode);
|
||||
|
||||
if (Dhcp4Mode.State == Dhcp4Bound) {
|
||||
Ip4Config2OnDhcp4Complete (NULL, Instance);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -1001,8 +1009,25 @@ Ip4StartAutoConfig (
|
|||
Dhcp4Mode.ConfigData.OptionList = OptionList;
|
||||
|
||||
Status = Dhcp4->Configure (Dhcp4, &Dhcp4Mode.ConfigData);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
gBS->CloseProtocol (
|
||||
Instance->Dhcp4Handle,
|
||||
&gEfiDhcp4ProtocolGuid,
|
||||
IpSb->Image,
|
||||
IpSb->Controller
|
||||
);
|
||||
|
||||
NetLibDestroyServiceChild (
|
||||
IpSb->Controller,
|
||||
IpSb->Image,
|
||||
&gEfiDhcp4ServiceBindingProtocolGuid,
|
||||
Instance->Dhcp4Handle
|
||||
);
|
||||
|
||||
Instance->Dhcp4 = NULL;
|
||||
|
||||
Instance->Dhcp4Handle = NULL;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -1016,21 +1041,24 @@ Ip4StartAutoConfig (
|
|||
Instance,
|
||||
&Instance->Dhcp4Event
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
Ip4Config2DestroyDhcp4 (Instance);
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = Dhcp4->Start (Dhcp4, Instance->Dhcp4Event);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
Ip4Config2DestroyDhcp4 (Instance);
|
||||
gBS->CloseEvent (Instance->Dhcp4Event);
|
||||
Instance->Dhcp4Event = NULL;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
IpSb->State = IP4_SERVICE_STARTED;
|
||||
IpSb->State = IP4_SERVICE_STARTED;
|
||||
DispatchDpc ();
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue