getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r4549 - in /trunk/getfem/src: dal_singleton.cc getfem/d


From: andriy . andreykiv
Subject: [Getfem-commits] r4549 - in /trunk/getfem/src: dal_singleton.cc getfem/dal_singleton.h
Date: Thu, 20 Mar 2014 11:42:08 -0000

Author: andrico
Date: Thu Mar 20 12:42:08 2014
New Revision: 4549

URL: http://svn.gna.org/viewcvs/getfem?rev=4549&view=rev
Log:
another attempt to remove interdependence of static members initialization in 
singletons

Modified:
    trunk/getfem/src/dal_singleton.cc
    trunk/getfem/src/getfem/dal_singleton.h

Modified: trunk/getfem/src/dal_singleton.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/dal_singleton.cc?rev=4549&r1=4548&r2=4549&view=diff
==============================================================================
--- trunk/getfem/src/dal_singleton.cc   (original)
+++ trunk/getfem/src/dal_singleton.cc   Thu Mar 20 12:42:08 2014
@@ -27,23 +27,15 @@
 
 namespace dal {
 
-  shared_ptr<singletons_manager> singletons_manager::m(0);
-  atomic_bool singletons_manager::manager_exists(false);
-
+ 
   singletons_manager::singletons_manager() : lst() {}
+  
+  singletons_manager& singletons_manager::m = manager();
 
   singletons_manager& singletons_manager::manager()
   {
-    if (!manager_exists)
-    {
-      getfem::omp_guard local_lock;
-      if (!manager_exists)
-      {
-        m.reset(new singletons_manager());
-        manager_exists = true;
-      }
-    }
-    return *m;
+    static singletons_manager x;
+    return x;
   }
 
 
@@ -73,11 +65,10 @@
     {
                        /* sort singletons in increasing levels,
                        lowest levels will be destroyed first */
-                 std::sort(manager().lst(i).begin(),manager().lst(i).end(), 
level_compare);
-                       std::vector<singleton_instance_base *>::const_iterator 
it = manager().lst(i).begin();
-      std::vector<singleton_instance_base *>::const_iterator ite = 
manager().lst(i).end();                     
+                 std::sort(lst(i).begin(),lst(i).end(), level_compare);
+                       std::vector<singleton_instance_base *>::const_iterator 
it  = lst(i).begin();
+      std::vector<singleton_instance_base *>::const_iterator ite = 
lst(i).end();                       
       for ( ; it != ite; ++it) { delete *it; }
                }
-    manager_exists = false;
        }
 }

Modified: trunk/getfem/src/getfem/dal_singleton.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/dal_singleton.h?rev=4549&r1=4548&r2=4549&view=diff
==============================================================================
--- trunk/getfem/src/getfem/dal_singleton.h     (original)
+++ trunk/getfem/src/getfem/dal_singleton.h     Thu Mar 20 12:42:08 2014
@@ -68,11 +68,10 @@
   class singletons_manager {
   protected:
     getfem::omp_distribute<std::vector<singleton_instance_base *> > lst;
-    static shared_ptr<singletons_manager> m;
-    static atomic_bool manager_exists;
+    static singletons_manager& manager();
+    static singletons_manager& m;
 
   public:
-    static singletons_manager& manager();
     static void register_new_singleton(singleton_instance_base *p);
     static void register_new_singleton(singleton_instance_base *p, int 
ithread);
     ~singletons_manager();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]