Module: wine Branch: master Commit: 99a0376a4fb259332def88438aa5c122da6efaa1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=99a0376a4fb259332def88438a...
Author: Jason Edmeades jason.edmeades@googlemail.com Date: Fri Jan 15 08:50:42 2010 -0800
kernel32: Return error on second attempt to free a module.
---
dlls/kernel32/module.c | 3 +-- dlls/kernel32/tests/module.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c index ff3c3a5..96a240e 100644 --- a/dlls/kernel32/module.c +++ b/dlls/kernel32/module.c @@ -1003,8 +1003,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH FreeLibrary(HINSTANCE hLibModule) { /* this is a LOAD_LIBRARY_AS_DATAFILE module */ char *ptr = (char *)hLibModule - 1; - UnmapViewOfFile( ptr ); - return TRUE; + return UnmapViewOfFile( ptr ); }
if ((nts = LdrUnloadDll( hLibModule )) == STATUS_SUCCESS) retv = TRUE; diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c index 4cb30a8..906646e 100644 --- a/dlls/kernel32/tests/module.c +++ b/dlls/kernel32/tests/module.c @@ -359,6 +359,24 @@ static void testLoadLibraryEx(void) ok(GetLastError() == ERROR_FILE_NOT_FOUND || broken(GetLastError() == ERROR_INVALID_HANDLE), /* nt4 */ "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); + + /* Free the loaded dll when its the first time this dll is loaded + in process - First time should pass, second fail */ + SetLastError(0xdeadbeef); + hmodule = LoadLibraryExA("comctl32.dll", NULL, LOAD_LIBRARY_AS_DATAFILE); + ok(hmodule != 0, "Expected valid module handle\n"); + + SetLastError(0xdeadbeef); + ok(FreeLibrary(hmodule), + "Expected to be able to free the module, failed with %d\n", + GetLastError()); + SetLastError(0xdeadbeef); + ok(!FreeLibrary(hmodule), + "Unexpected ability to free the module, failed with %d\n", + GetLastError()); + + CloseHandle(hmodule); + }
START_TEST(module)