mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Stop the timer before clean IP service.
In Ip4CleanService()it first cleaned some resources, then stop the timer . While before the timer stopped it may try to access some already freed data, which may generate an exception. This patch updates the driver to stop the timer event before starting to clean up the service data. Cc: Wu Jiaxin <jiaxin.wu@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Subramanian Sriram <sriram-s@hpe.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Samer El-Haj-Mahmoud <elhaj@hpe.com> Reviewed-by: Sriram Subramanian <sriram-s@hpe.com> Reviewed-by: Ye Ting <ting.ye@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
This commit is contained in:
parent
3ab7066e8d
commit
524813f3ab
|
@ -393,6 +393,15 @@ Ip4CleanService (
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
IpSb->State = IP4_SERVICE_DESTROY;
|
||||||
|
|
||||||
|
if (IpSb->Timer != NULL) {
|
||||||
|
gBS->SetTimer (IpSb->Timer, TimerCancel, 0);
|
||||||
|
gBS->CloseEvent (IpSb->Timer);
|
||||||
|
|
||||||
|
IpSb->Timer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (IpSb->DefaultInterface != NULL) {
|
if (IpSb->DefaultInterface != NULL) {
|
||||||
Status = Ip4FreeInterface (IpSb->DefaultInterface, NULL);
|
Status = Ip4FreeInterface (IpSb->DefaultInterface, NULL);
|
||||||
|
|
||||||
|
@ -432,13 +441,6 @@ Ip4CleanService (
|
||||||
IpSb->MnpChildHandle = NULL;
|
IpSb->MnpChildHandle = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IpSb->Timer != NULL) {
|
|
||||||
gBS->SetTimer (IpSb->Timer, TimerCancel, 0);
|
|
||||||
gBS->CloseEvent (IpSb->Timer);
|
|
||||||
|
|
||||||
IpSb->Timer = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IpSb->ReconfigEvent != NULL) {
|
if (IpSb->ReconfigEvent != NULL) {
|
||||||
gBS->CloseEvent (IpSb->ReconfigEvent);
|
gBS->CloseEvent (IpSb->ReconfigEvent);
|
||||||
|
|
||||||
|
@ -750,8 +752,6 @@ Ip4DriverBindingStop (
|
||||||
|
|
||||||
} else if (IsListEmpty (&IpSb->Children)) {
|
} else if (IsListEmpty (&IpSb->Children)) {
|
||||||
State = IpSb->State;
|
State = IpSb->State;
|
||||||
IpSb->State = IP4_SERVICE_DESTROY;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// OK, clean other resources then uninstall the service binding protocol.
|
// OK, clean other resources then uninstall the service binding protocol.
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue