]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Change the EfiAquireLock with RaiseTPL as the call to Boot Service UnloadImage can...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 19 Mar 2007 09:05:41 +0000 (09:05 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 19 Mar 2007 09:05:41 +0000 (09:05 +0000)
The same change has been done to Boot Service Exit with the same reason applied.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2486 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/Core/Dxe/Image/Image.c

index f1b2c7a1056a45459f3c92b5b8e0c0c4660eb166..3696400072e6f6be71090466699a6ef877228256 100644 (file)
@@ -24,9 +24,6 @@ Abstract:
 // Module Globals\r
 //\r
 \r
 // Module Globals\r
 //\r
 \r
-EFI_LOCK mBsExitLock        = EFI_INITIALIZE_LOCK_VARIABLE(EFI_TPL_NOTIFY);\r
-EFI_LOCK mBsUnloadImageLock = EFI_INITIALIZE_LOCK_VARIABLE(EFI_TPL_NOTIFY);\r
-\r
 LOADED_IMAGE_PRIVATE_DATA  *mCurrentImage = NULL;\r
 \r
 LOAD_PE32_IMAGE_PRIVATE_DATA  mLoadPe32PrivateData = {\r
 LOADED_IMAGE_PRIVATE_DATA  *mCurrentImage = NULL;\r
 \r
 LOAD_PE32_IMAGE_PRIVATE_DATA  mLoadPe32PrivateData = {\r
@@ -1221,9 +1218,14 @@ Returns:
 --*/\r
 {\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
 --*/\r
 {\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
+  EFI_TPL                    OldTpl;\r
 \r
 \r
-  EfiAcquireLock (&mBsExitLock);\r
-  \r
+  //\r
+  // Prevent possible reentrance to this function\r
+  // for the same ImageHandle\r
+  // \r
+  OldTpl = CoreRaiseTpl (EFI_TPL_NOTIFY); \r
\r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL_HANDLE) {\r
     Status = EFI_INVALID_PARAMETER;\r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL_HANDLE) {\r
     Status = EFI_INVALID_PARAMETER;\r
@@ -1266,7 +1268,7 @@ Returns:
     CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
   }\r
 \r
     CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
   }\r
 \r
-  EfiReleaseLock (&mBsExitLock);\r
+  CoreRestoreTpl (OldTpl);\r
   //\r
   // return to StartImage\r
   //\r
   //\r
   // return to StartImage\r
   //\r
@@ -1278,7 +1280,7 @@ Returns:
   ASSERT (FALSE);\r
   Status = EFI_ACCESS_DENIED;\r
 Done:\r
   ASSERT (FALSE);\r
   Status = EFI_ACCESS_DENIED;\r
 Done:\r
-  EfiReleaseLock (&mBsExitLock);\r
+  CoreRestoreTpl (OldTpl);\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r
@@ -1309,9 +1311,14 @@ Returns:
 {\r
   EFI_STATUS                 Status;\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
 {\r
   EFI_STATUS                 Status;\r
   LOADED_IMAGE_PRIVATE_DATA  *Image;\r
+  EFI_TPL                    OldTpl;\r
 \r
 \r
-  EfiAcquireLock (&mBsUnloadImageLock);\r
-  \r
+  //\r
+  // Prevent possible reentrance to this function\r
+  // for the same ImageHandle\r
+  // \r
+  OldTpl = CoreRaiseTpl (EFI_TPL_NOTIFY);\r
\r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL ) {\r
     //\r
   Image = CoreLoadedImageInfo (ImageHandle);\r
   if (Image == NULL ) {\r
     //\r
@@ -1346,7 +1353,7 @@ Returns:
   }\r
 \r
 Done:\r
   }\r
 \r
 Done:\r
-  EfiReleaseLock (&mBsUnloadImageLock);\r
+  CoreRestoreTpl (OldTpl);\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r