// 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
--*/\r
{\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
+ EFI_TPL OldTpl;\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
CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
}\r
\r
- EfiReleaseLock (&mBsExitLock);\r
+ CoreRestoreTpl (OldTpl);\r
//\r
// return to StartImage\r
//\r
ASSERT (FALSE);\r
Status = EFI_ACCESS_DENIED;\r
Done:\r
- EfiReleaseLock (&mBsExitLock);\r
+ CoreRestoreTpl (OldTpl);\r
return Status;\r
}\r
\r
{\r
EFI_STATUS Status;\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
+ EFI_TPL OldTpl;\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
}\r
\r
Done:\r
- EfiReleaseLock (&mBsUnloadImageLock);\r
+ CoreRestoreTpl (OldTpl);\r
return Status;\r
}\r
\r