]> Creatis software - bbtk.git/commitdiff
Autodestruction of packages on automatic dlclose after main (if a package was not...
authorguigues <guigues>
Wed, 21 May 2008 12:50:11 +0000 (12:50 +0000)
committerguigues <guigues>
Wed, 21 May 2008 12:50:11 +0000 (12:50 +0000)
kernel/src/bbtkPackage.h

index 089dbee65498918ab3c7c829d20a754d994c6b84..5dccf50a719ee49f2a5ccde064d34c375b70bb64 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkPackage.h,v $
   Language:  C++
-  Date:      $Date: 2008/04/18 12:59:15 $
-  Version:   $Revision: 1.8 $
+  Date:      $Date: 2008/05/21 12:50:11 $
+  Version:   $Revision: 1.9 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See doc/license.txt or
@@ -333,8 +333,22 @@ namespace bbtk
       return NAME ## GetPackagePointer();                              \
     }                                                                  \
     BBTK_PACKAGE_EXPORT const std::string&                             \
-    BBTK_CDECL NAME ## GetPackageBBTKVersion ()        \
+    BBTK_CDECL NAME ## GetPackageBBTKVersion ()                                \
     { return bbtk::GetVersion(); }                                     \
+    class NAME ## PackageAutodestructor                                        \
+    {                                                                  \
+    public:                                                            \
+      NAME ## PackageAutodestructor() {}                               \
+      ~NAME ## PackageAutodestructor()                                 \
+      {                                                                        \
+       if (NAME ## GetPackagePointer().use_count()>0)                  \
+         {                                                             \
+           bbtk::Package::WeakPointer p = NAME ## GetPackagePointer(); \
+           bbtk::Package::Release(p);                                  \
+         }                                                             \
+      }                                                                        \
+    };                                                                 \
+    NAME ## PackageAutodestructor NAME ## PackageAutodestructorInstance; \
   }
 //====================================================================