X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkPackage.cxx;h=2a1fc8d3772fdf05e8f6aa4c535c05eb6a6e9ddb;hb=2a9b694dca646ad9562f47a5bdb4f209059bd22a;hp=d705f36470a0ec35f83df3c04024fe936bbf6761;hpb=c8ea4a3d9af36d4ea4d220caa1fd1ef21b221ab9;p=bbtk.git diff --git a/kernel/src/bbtkPackage.cxx b/kernel/src/bbtkPackage.cxx index d705f36..2a1fc8d 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: 2008/10/17 08:21:44 $ - Version: $Revision: 1.23 $ + Date: $Date: 2009/05/28 12:18:51 $ + Version: $Revision: 1.28 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -34,6 +34,7 @@ *\brief Class bbtk::Package : registers black boxes descriptors and is able to create instances of the black boxes registered. */ #include "bbtkPackage.h" +#include "bbtkComplexBlackBoxDescriptor.h" #include "bbtkMessageManager.h" #include "bbtkConfigurationFile.h" #include @@ -50,16 +51,14 @@ namespace bbtk Package::Pointer Package::New(const std::string& name, const std::string& author, const std::string& description, - const std::string& version, - const std::string& BBTKVersion) + const std::string& version) { bbtkDebugMessage("object",1,"##> Package::New('"< Package::Package('"< Package('"< Package::~Package(\""< ~Package(\""<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(); - } - } //========================================================================== @@ -234,8 +228,14 @@ namespace bbtk break; } - PackageReleaseBlackBoxDescriptorInternal(pack,*descname); - +#if defined(MACOSX) + BlackBoxDescriptor::Pointer desc = pack.lock()->mBlackBoxMap[*descname]; + if ( (dyn==0) || (boost::dynamic_pointer_cast(desc)) ) + PackageReleaseBlackBoxDescriptorInternal(pack,*descname); +#else + PackageReleaseBlackBoxDescriptorInternal(pack,*descname); +#endif + } // @@ -305,7 +305,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 @@ -356,8 +362,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, @@ -627,12 +634,17 @@ namespace bbtk bbtkDebugMessage("package",5,"==> Package::UnLoadReleasedDynamicallyLoadedPackages()"<::iterator i; - for (i=mReleasedDynamicallyLoadedPackages.begin(); - i!=mReleasedDynamicallyLoadedPackages.end(); - ++i) - { - if (!i->expired()) UnLoad(*i); - } + +//JCP- 21-04-09 + if(mReleasedDynamicallyLoadedPackages.size()>0){ + for (i=mReleasedDynamicallyLoadedPackages.begin(); + i!=mReleasedDynamicallyLoadedPackages.end(); + ++i) + { + if (!i->expired()) UnLoad(*i); + } + } +//JCP- 21-04-09 bbtkDebugMessage("package",5,"<== Package::UnLoadReleasedDynamicallyLoadedPackages()"<