Fix the bug that Boot Mainteinance Manager in the front page can not be entered twice or more.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8040 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
rsun3 2009-04-08 09:20:51 +00:00
parent 299b4cf312
commit 4376a6f273
1 changed files with 30 additions and 7 deletions

View File

@ -910,7 +910,7 @@ InitializeBM (
NULL NULL
); );
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; goto Exit;
} }
// //
@ -925,7 +925,7 @@ InitializeBM (
NULL NULL
); );
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; goto Exit;
} }
// //
@ -962,9 +962,8 @@ InitializeBM (
gUpdateData.BufferSize = UPDATE_DATA_SIZE; gUpdateData.BufferSize = UPDATE_DATA_SIZE;
gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE); gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);
if (gUpdateData.Data == NULL) { if (gUpdateData.Data == NULL) {
FreePool (BmmCallbackInfo->LoadContext); Status = EFI_OUT_OF_RESOURCES;
FreePool (BmmCallbackInfo); goto Exit;
return EFI_OUT_OF_RESOURCES;
} }
InitializeStringDepository (); InitializeStringDepository ();
@ -1065,11 +1064,35 @@ InitializeBM (
FreeAllMenu (); FreeAllMenu ();
FreePool (BmmCallbackInfo->LoadContext);
FreePool (BmmCallbackInfo);
FreePool (gUpdateData.Data); FreePool (gUpdateData.Data);
gUpdateData.Data = NULL; gUpdateData.Data = NULL;
Exit:
if (BmmCallbackInfo->FeDriverHandle != NULL) {
gBS->UninstallMultipleProtocolInterfaces (
BmmCallbackInfo->FeDriverHandle,
&gEfiDevicePathProtocolGuid,
&mFeHiiVendorDevicePath,
&gEfiHiiConfigAccessProtocolGuid,
&BmmCallbackInfo->FeConfigAccess,
NULL
);
}
if (BmmCallbackInfo->BmmDriverHandle != NULL) {
gBS->UninstallMultipleProtocolInterfaces (
BmmCallbackInfo->BmmDriverHandle,
&gEfiDevicePathProtocolGuid,
&mBmmHiiVendorDevicePath,
&gEfiHiiConfigAccessProtocolGuid,
&BmmCallbackInfo->BmmConfigAccess,
NULL
);
}
FreePool (BmmCallbackInfo->LoadContext);
FreePool (BmmCallbackInfo);
return Status; return Status;
} }