InDeletedVariable = NULL;\r
InDeletedStorageIndex = 0;\r
for (Index = 0; Index < 2; Index++) {\r
- while (IsValidVariableHeader (Variable[Index]) && (Variable[Index] <= GetEndPointer (VariableStoreHeader[Index]))) {\r
+ while ((Variable[Index] < GetEndPointer (VariableStoreHeader[Index])) && IsValidVariableHeader (Variable[Index])) {\r
if (Variable[Index]->State == VAR_ADDED || \r
Variable[Index]->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)\r
) {\r
//\r
// Get the FVB to access variable store\r
//\r
- for (Index = 0; Index < HandleCount; Index += 1, Status = EFI_NOT_FOUND) {\r
+ for (Index = 0; Index < HandleCount; Index += 1, Status = EFI_NOT_FOUND, Fvb = NULL) {\r
Status = gBS->HandleProtocol (\r
HandleBuffer[Index],\r
&gEfiFirmwareVolumeBlockProtocolGuid,\r
}\r
\r
FreePool (HandleBuffer);\r
- if (!EFI_ERROR (Status)) {\r
+ if (!EFI_ERROR (Status) && Fvb != NULL) {\r
+ //\r
+ // Close the notify event to avoid install gEfiVariableArchProtocolGuid & gEfiVariableWriteArchProtocolGuid again.\r
+ //\r
+ Status = gBS->CloseEvent (Event); \r
+ ASSERT_EFI_ERROR (Status);\r
+\r
Status = VariableCommonInitialize (Fvb);\r
ASSERT_EFI_ERROR (Status);\r
\r
- SystemTable->RuntimeServices->GetVariable = RuntimeServiceGetVariable;\r
+ SystemTable->RuntimeServices->GetVariable = RuntimeServiceGetVariable;\r
SystemTable->RuntimeServices->GetNextVariableName = RuntimeServiceGetNextVariableName;\r
- SystemTable->RuntimeServices->SetVariable = RuntimeServiceSetVariable;\r
- SystemTable->RuntimeServices->QueryVariableInfo = RuntimeServiceQueryVariableInfo;\r
+ SystemTable->RuntimeServices->SetVariable = RuntimeServiceSetVariable;\r
+ SystemTable->RuntimeServices->QueryVariableInfo = RuntimeServiceQueryVariableInfo;\r
\r
//\r
// Now install the Variable Runtime Architectural Protocol on a new handle\r