]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
close notify event to avoid variable architectural protocol to be installed twice...
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / Variable.c
index f89d6ed1c96cc6fe548cbcb9ec54134a31e4fe12..fdaad2017ecb3d02c46ab585c62f8da979ab6cb6 100644 (file)
@@ -930,7 +930,7 @@ FindVariable (
   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
@@ -2051,7 +2051,7 @@ FvbNotificationEvent (
   //\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
@@ -2086,14 +2086,20 @@ FvbNotificationEvent (
   }\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