View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0000984 | VTK | (No Category) | public | 2004-07-14 07:42 | 2011-01-13 17:00 | ||||
Reporter | Mathieu Malaterre | ||||||||
Assigned To | Mathieu Malaterre | ||||||||
Priority | low | Severity | minor | Reproducibility | always | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | |||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0000984: vtkDynamicLoader::CloseLibrary bug | ||||||||
Description | I think that vtkDynamicLoader::CloseLibrary misbehaves on UNIX/Linux, cvs version of VTK. >From the vtk documentation: int vtkDynamicLoader::CloseLibrary (vtkLibHandle) [static] Attempt to detach a dynamic library from the process. A value of true is returned if it is successful. >From man 3 dlclose: dlclose returns 0 on success, and non-zero on error. The code: int vtkDynamicLoader::CloseLibrary(vtkLibHandle lib) { return (int)dlclose(lib); } This seems to be in error; the patch below fixes it. | ||||||||
Tags | No tags attached. | ||||||||
Project | |||||||||
Type | |||||||||
Attached Files | |||||||||
Relationships | |
Relationships |
Notes | |
(0001259) Mathieu Malaterre (developer) 2004-07-14 07:45 |
applying this patch: Index: vtkDynamicLoader.cxx =================================================================== RCS file: /cvsroot/VTK/VTK/Common/vtkDynamicLoader.cxx,v retrieving revision 1.18 diff -u -3 -p -r1.18 vtkDynamicLoader.cxx --- a/vtkDynamicLoader.cxx 17 Feb 2004 20:31:01 -0000 1.18 +++ b/vtkDynamicLoader.cxx 14 Jul 2004 11:40:44 -0000 @@ -112,16 +112,21 @@ int vtkDynamicLoader::CloseLibrary(vtkLi void* vtkDynamicLoader::GetSymbolAddress(vtkLibHandle, const char* sym) { - void *result=0; - if(NSIsSymbolNameDefined(sym)){ - cout << sym << " is defined!" << endl; - NSSymbol symbol= NSLookupAndBindSymbol(sym); - if(symbol){ - result = NSAddressOfSymbol(symbol); - } - }else{ - cout << sym << " is not defined!" << endl; - } + void *result = 0; + if( NSIsSymbolNameDefined(sym) ) + { + cout << sym << " is defined!" << endl; + NSSymbol symbol= NSLookupAndBindSymbol(sym); + if(symbol) + { + result = NSAddressOfSymbol(symbol); + } + } + else + { + cout << sym << " is not defined!" << endl; + } + return result; } @@ -154,13 +159,13 @@ const char* vtkDynamicLoader::LastError( vtkLibHandle vtkDynamicLoader::OpenLibrary(const char* libname ) { #ifdef UNICODE - wchar_t *libn = new wchar_t [mbstowcs(NULL, libname, 32000)+1]; - mbstowcs(libn, libname, 32000); - vtkLibHandle ret = LoadLibrary(libn); - delete [] libn; - return ret; + wchar_t *libn = new wchar_t [mbstowcs(NULL, libname, 32000)+1]; + mbstowcs(libn, libname, 32000); + vtkLibHandle ret = LoadLibrary(libn); + delete [] libn; + return ret; #else - return LoadLibrary(libname); + return LoadLibrary(libname); #endif } @@ -172,14 +177,14 @@ int vtkDynamicLoader::CloseLibrary(vtkLi void* vtkDynamicLoader::GetSymbolAddress(vtkLibHandle lib, const char* sym) { #if defined (UNICODE) && !defined(_MSC_VER) - wchar_t *wsym = new wchar_t [mbstowcs(NULL, sym, 32000)+1]; - mbstowcs(wsym, sym, 32000); - // Force GetProcAddress to return void* with a c style cast - // This is because you can not cast a function to a void* without - // an error on gcc 3.2 and ANSI C++, - void *ret = (void*)GetProcAddress(lib, wsym); - delete [] wsym; - return ret; + wchar_t *wsym = new wchar_t [mbstowcs(NULL, sym, 32000)+1]; + mbstowcs(wsym, sym, 32000); + // Force GetProcAddress to return void* with a c style cast + // This is because you can not cast a function to a void* without + // an error on gcc 3.2 and ANSI C++, + void *ret = (void*)GetProcAddress(lib, wsym); + delete [] wsym; + return ret; #else return (void*)GetProcAddress(lib, sym); #endif @@ -237,7 +242,8 @@ vtkLibHandle vtkDynamicLoader::OpenLibra int vtkDynamicLoader::CloseLibrary(vtkLibHandle lib) { - return (int)dlclose(lib); + // dlclose returns 0 on success, and non-zero on error. + return !((int)dlclose(lib)); } void* vtkDynamicLoader::GetSymbolAddress(vtkLibHandle lib, const char* sym) |
(0001260) Mathieu Malaterre (developer) 2004-07-14 07:50 |
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/freelibrary.asp [^] BOOL FreeLibrary( HMODULE hModule ); Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2010-11-29 17:59 | Mathieu Malaterre | Source_changeset_attached | => VTK master 27443ddf |
2011-01-13 17:00 | Source_changeset_attached | => VTK master a2bd8391 | |
2011-01-13 17:00 | Source_changeset_attached | => VTK master 020ef709 | |
2011-06-16 13:11 | Zack Galbreath | Category | => (No Category) |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |