]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/String.c
MdeModulePkg/HiiDB: Make sure database update behaviors are atomic
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / String.c
index aeda47430f7203c5c2f82756ad125a3a59655955..a8178bdca2523719d599c370795cb1582c7baf4a 100644 (file)
@@ -1210,6 +1210,8 @@ HiiNewString (
     return EFI_NOT_FOUND;\r
   }\r
 \r
+  EfiAcquireLock (&mHiiDatabaseLock);\r
+\r
   Status = EFI_SUCCESS;\r
   NewStringPackageCreated = FALSE;\r
   NewStringId   = 0;\r
@@ -1573,6 +1575,8 @@ Done:
     }\r
   }\r
 \r
+  EfiReleaseLock (&mHiiDatabaseLock);\r
+\r
   return Status;\r
 }\r
 \r
@@ -1738,6 +1742,8 @@ HiiSetString (
     return EFI_NOT_FOUND;\r
   }\r
 \r
+  EfiAcquireLock (&mHiiDatabaseLock);\r
+\r
   Private = HII_STRING_DATABASE_PRIVATE_DATA_FROM_THIS (This);\r
   PackageListNode = NULL;\r
 \r
@@ -1764,6 +1770,7 @@ HiiSetString (
                    (EFI_FONT_INFO *) StringFontInfo\r
                    );\r
         if (EFI_ERROR (Status)) {\r
+          EfiReleaseLock (&mHiiDatabaseLock);\r
           return Status;\r
         }\r
         PackageListNode->PackageListHdr.PackageLength += StringPackage->StringPkgHdr->Header.Length - OldPackageLen;\r
@@ -1774,11 +1781,13 @@ HiiSetString (
         if (gExportAfterReadyToBoot) {\r
           HiiGetDatabaseInfo(&Private->HiiDatabase);\r
         }\r
+        EfiReleaseLock (&mHiiDatabaseLock);\r
         return EFI_SUCCESS;\r
       }\r
     }\r
   }\r
 \r
+  EfiReleaseLock (&mHiiDatabaseLock);\r
   return EFI_NOT_FOUND;\r
 }\r
 \r