summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
87c40bc)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2437
6f19259b-4bc3-4df7-8a09-
765794883524
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
// 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
{\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
\r
{\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
\r
+ EfiAcquireLock (&mBsExitLock);\r
+ \r
Image = CoreLoadedImageInfo (ImageHandle);\r
if (Image == NULL_HANDLE) {\r
Image = CoreLoadedImageInfo (ImageHandle);\r
if (Image == NULL_HANDLE) {\r
- return EFI_INVALID_PARAMETER;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
\r
if (!Image->Started) {\r
}\r
\r
if (!Image->Started) {\r
// The image has not been started so just free its resources\r
//\r
CoreUnloadAndCloseImage (Image, TRUE);\r
// The image has not been started so just free its resources\r
//\r
CoreUnloadAndCloseImage (Image, TRUE);\r
+ Status = EFI_SUCCESS;\r
+ goto Done;\r
//\r
if (Image != mCurrentImage) {\r
DEBUG ((EFI_D_LOAD|EFI_D_ERROR, "Exit: Image is not exitable image\n"));\r
//\r
if (Image != mCurrentImage) {\r
DEBUG ((EFI_D_LOAD|EFI_D_ERROR, "Exit: Image is not exitable image\n"));\r
- return EFI_INVALID_PARAMETER;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Done;\r
Image->ExitDataSize = ExitDataSize;\r
Image->ExitData = CoreAllocateBootServicesPool (Image->ExitDataSize);\r
if (Image->ExitData == NULL) {\r
Image->ExitDataSize = ExitDataSize;\r
Image->ExitData = CoreAllocateBootServicesPool (Image->ExitDataSize);\r
if (Image->ExitData == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Done;\r
}\r
CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
}\r
\r
}\r
CopyMem (Image->ExitData, ExitData, Image->ExitDataSize);\r
}\r
\r
+ EfiReleaseLock (&mBsExitLock);\r
//\r
// return to StartImage\r
//\r
//\r
// return to StartImage\r
//\r
// If we return from LongJump, then it is an error\r
//\r
ASSERT (FALSE);\r
// If we return from LongJump, then it is an error\r
//\r
ASSERT (FALSE);\r
- return EFI_ACCESS_DENIED;\r
+ Status = EFI_ACCESS_DENIED;\r
+Done:\r
+ EfiReleaseLock (&mBsExitLock);\r
+ return Status;\r
EFI_STATUS Status;\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
\r
EFI_STATUS Status;\r
LOADED_IMAGE_PRIVATE_DATA *Image;\r
\r
+ EfiAcquireLock (&mBsUnloadImageLock);\r
+ \r
Image = CoreLoadedImageInfo (ImageHandle);\r
if (Image == NULL ) {\r
//\r
// The image handle is not valid\r
//\r
Image = CoreLoadedImageInfo (ImageHandle);\r
if (Image == NULL ) {\r
//\r
// The image handle is not valid\r
//\r
- return EFI_INVALID_PARAMETER;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
\r
if (Image->Started) {\r
}\r
\r
if (Image->Started) {\r
CoreUnloadAndCloseImage (Image, TRUE);\r
}\r
\r
CoreUnloadAndCloseImage (Image, TRUE);\r
}\r
\r
+Done:\r
+ EfiReleaseLock (&mBsUnloadImageLock);\r