From 5b194611c91ef0f24a86ec894c527a1c1e6e89a2 Mon Sep 17 00:00:00 2001 From: Eduardo Davila Date: Thu, 28 May 2009 08:26:59 +0000 Subject: [PATCH] . --- kernel/src/bbtkPackage.cxx | 118 +++++++++++++++++++++---------------- kernel/src/bbtkPackage.h | 13 ++-- 2 files changed, 73 insertions(+), 58 deletions(-) diff --git a/kernel/src/bbtkPackage.cxx b/kernel/src/bbtkPackage.cxx index ead823c..59abd49 100644 --- a/kernel/src/bbtkPackage.cxx +++ b/kernel/src/bbtkPackage.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkPackage.cxx,v $ Language: C++ - Date: $Date: 2009/05/28 08:12:06 $ - Version: $Revision: 1.26 $ + Date: $Date: 2009/05/28 08:26:59 $ + Version: $Revision: 1.27 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -117,52 +117,49 @@ namespace bbtk //========================================================================== - void PackageReleaseBlackBoxDescriptorInternal(Package::WeakPointer pack, - const std::string& descname) - { - // Try to release descriptor - std::string packname = pack.lock()->GetName(); - - bbtkDebugMessage("package",5,"--- Releasing descriptor '" - <GetBlackBoxMap().find(descname); - if (desc == pack.lock()->GetBlackBoxMap().end()) - { - bbtkDebugMessage("package",5, - " Descriptor has already been released" - <second; - desc->second.reset(); - // if it is dead : remove it - if (pdesc.expired()) - { - bbtkDebugMessage("package",2," ==> '"<GetName(); + + bbtkDebugMessage("package",5,"--- Releasing descriptor '" + <GetBlackBoxMap().find(descname); + if (desc == pack.lock()->GetBlackBoxMap().end()) + { + bbtkDebugMessage("package",5, + " Descriptor has already been released" + <second; + desc->second.reset(); + // if it is dead : remove it + if (pdesc.expired()) + { + bbtkDebugMessage("package",2," ==> '"<GetBlackBoxMap().find(descname); + if (desc != pack.lock()->GetBlackBoxMap().end()) pack.lock()->GetBlackBoxMap().erase(desc); + } else { //pdesc.expired + bbtkDebugMessage("package",5," ... Descriptor still alive (" + <GetBlackBoxMap()[descname] = pdesc.lock(); + } // pdesc.expired } - desc = pack.lock()->GetBlackBoxMap().find(descname); - if (desc != pack.lock()->GetBlackBoxMap().end()) - pack.lock()->GetBlackBoxMap().erase(desc); - } - else - { - bbtkDebugMessage("package",5," ... Descriptor still alive (" - <GetBlackBoxMap()[descname] = pdesc.lock(); - } - } //========================================================================== @@ -230,8 +227,12 @@ namespace bbtk break; } - PackageReleaseBlackBoxDescriptorInternal(pack,*descname); - +#if defined(MACOSX) + if (dyn==0) PackageReleaseBlackBoxDescriptorInternal(pack,*descname); +#else + PackageReleaseBlackBoxDescriptorInternal(pack,*descname); +#endif + } // @@ -301,7 +302,13 @@ namespace bbtk // and descallocated (reset) by PACKAGENAMEDeletePackage()) if (nrefs == ndesc + dyn) { - PackageReleaseBlackBoxDescriptorInternal(pack,dname); +#if defined(MACOSX) + // + if (dyn==0) + PackageReleaseBlackBoxDescriptorInternal(pack,dname); +#else + PackageReleaseBlackBoxDescriptorInternal(pack,dname); +#endif } // If the package is released and dynamically loaded @@ -352,8 +359,9 @@ namespace bbtk // Open shared lib void *handler; - handler = dlopen(libname.c_str(), - BBTK_RTLD_TIME | BBTK_RTLD_SCOPE ); + handler = dlopen(libname.c_str(), BBTK_RTLD_TIME | BBTK_RTLD_SCOPE ); +//EED handler = dlopen(libname.c_str(), RTLD_LAZY | RTLD_LOCAL ); + if (!handler) { bbtkMessage("package",2, @@ -653,7 +661,13 @@ namespace bbtk // closes the dl handler #if defined(__GNUC__) - dlclose(h); + if (dlclose(h)!=0) + { + printf("EED Package::UnLoad ERROR %s\n", packname.c_str() ); + bbtkWarning("Failed to close dynamic library for package '"<