mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
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;
|
IP4_CONFIG2_DHCP4_OPTION ParaList;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
|
||||||
IpSb = IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE (Instance);
|
IpSb = IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE (Instance);
|
||||||
|
|
||||||
if (IpSb->State > IP4_SERVICE_UNSTARTED) {
|
if (IpSb->State > IP4_SERVICE_UNSTARTED) {
|
||||||
@ -970,8 +969,18 @@ Ip4StartAutoConfig (
|
|||||||
IpSb->Controller,
|
IpSb->Controller,
|
||||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
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
|
// Check the current DHCP status, if the DHCP process has
|
||||||
@ -979,11 +988,10 @@ Ip4StartAutoConfig (
|
|||||||
//
|
//
|
||||||
Dhcp4 = Instance->Dhcp4;
|
Dhcp4 = Instance->Dhcp4;
|
||||||
Status = Dhcp4->GetModeData (Dhcp4, &Dhcp4Mode);
|
Status = Dhcp4->GetModeData (Dhcp4, &Dhcp4Mode);
|
||||||
|
|
||||||
if (Dhcp4Mode.State == Dhcp4Bound) {
|
if (Dhcp4Mode.State == Dhcp4Bound) {
|
||||||
Ip4Config2OnDhcp4Complete (NULL, Instance);
|
Ip4Config2OnDhcp4Complete (NULL, Instance);
|
||||||
return EFI_SUCCESS;
|
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1001,8 +1009,25 @@ Ip4StartAutoConfig (
|
|||||||
Dhcp4Mode.ConfigData.OptionList = OptionList;
|
Dhcp4Mode.ConfigData.OptionList = OptionList;
|
||||||
|
|
||||||
Status = Dhcp4->Configure (Dhcp4, &Dhcp4Mode.ConfigData);
|
Status = Dhcp4->Configure (Dhcp4, &Dhcp4Mode.ConfigData);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
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;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1016,21 +1041,24 @@ Ip4StartAutoConfig (
|
|||||||
Instance,
|
Instance,
|
||||||
&Instance->Dhcp4Event
|
&Instance->Dhcp4Event
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
Ip4Config2DestroyDhcp4 (Instance);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = Dhcp4->Start (Dhcp4, Instance->Dhcp4Event);
|
Status = Dhcp4->Start (Dhcp4, Instance->Dhcp4Event);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
Ip4Config2DestroyDhcp4 (Instance);
|
||||||
|
gBS->CloseEvent (Instance->Dhcp4Event);
|
||||||
|
Instance->Dhcp4Event = NULL;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
IpSb->State = IP4_SERVICE_STARTED;
|
IpSb->State = IP4_SERVICE_STARTED;
|
||||||
DispatchDpc ();
|
DispatchDpc ();
|
||||||
return EFI_SUCCESS;
|
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user