2011-02-23 Patrick Gansterer <paroga@webkit.org>
authorparoga@webkit.org <paroga@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Feb 2011 11:42:04 +0000 (11:42 +0000)
committerparoga@webkit.org <paroga@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Feb 2011 11:42:04 +0000 (11:42 +0000)
        Reviewed by Alexey Proskuryakov.

        Use DEFINE_STATIC_LOCAL for ignoreSetMutex in Structure.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54831

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/Structure.cpp:
        (JSC::ignoreSetMutex):
        (JSC::Structure::Structure):
        (JSC::Structure::~Structure):
        (JSC::Structure::initializeThreading):
        * runtime/Structure.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@79435 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/InitializeThreading.cpp
Source/JavaScriptCore/runtime/Structure.cpp
Source/JavaScriptCore/runtime/Structure.h

index be10314..5bacb29 100644 (file)
@@ -1,5 +1,21 @@
 2011-02-23  Patrick Gansterer  <paroga@webkit.org>
 
+        Reviewed by Alexey Proskuryakov.
+
+        Use DEFINE_STATIC_LOCAL for ignoreSetMutex in Structure.cpp
+        https://bugs.webkit.org/show_bug.cgi?id=54831
+
+        * runtime/InitializeThreading.cpp:
+        (JSC::initializeThreadingOnce):
+        * runtime/Structure.cpp:
+        (JSC::ignoreSetMutex):
+        (JSC::Structure::Structure):
+        (JSC::Structure::~Structure):
+        (JSC::Structure::initializeThreading):
+        * runtime/Structure.h:
+
+2011-02-23  Patrick Gansterer  <paroga@webkit.org>
+
         Reviewed by Darin Adler.
 
         Rename PLATFORM(CF) to USE(CF)
index 27611b7..aef60c8 100644 (file)
@@ -59,6 +59,7 @@ static void initializeThreadingOnce()
     s_dtoaP5Mutex = new Mutex;
     initializeDates();
     RegisterFile::initializeThreading();
+    Structure::initializeThreading();
 #endif
 }
 
index 0476cb0..4f78c74 100644 (file)
@@ -66,7 +66,11 @@ static const unsigned newTableSize = 16;
 static WTF::RefCountedLeakCounter structureCounter("Structure");
 
 #if ENABLE(JSC_MULTIPLE_THREADS)
-static Mutex& ignoreSetMutex = *(new Mutex);
+static Mutex& ignoreSetMutex()
+{
+    DEFINE_STATIC_LOCAL(Mutex, mutex, ());
+    return mutex;
+}
 #endif
 
 static bool shouldIgnoreLeaks;
@@ -208,7 +212,7 @@ Structure::Structure(JSValue prototype, const TypeInfo& typeInfo, unsigned anony
 
 #ifndef NDEBUG
 #if ENABLE(JSC_MULTIPLE_THREADS)
-    MutexLocker protect(ignoreSetMutex);
+    MutexLocker protect(ignoreSetMutex());
 #endif
     if (shouldIgnoreLeaks)
         ignoreSet.add(this);
@@ -242,7 +246,7 @@ Structure::Structure(const Structure* previous)
 
 #ifndef NDEBUG
 #if ENABLE(JSC_MULTIPLE_THREADS)
-    MutexLocker protect(ignoreSetMutex);
+    MutexLocker protect(ignoreSetMutex());
 #endif
     if (shouldIgnoreLeaks)
         ignoreSet.add(this);
@@ -275,7 +279,7 @@ Structure::~Structure()
 
 #ifndef NDEBUG
 #if ENABLE(JSC_MULTIPLE_THREADS)
-    MutexLocker protect(ignoreSetMutex);
+    MutexLocker protect(ignoreSetMutex());
 #endif
     HashSet<Structure*>::iterator it = ignoreSet.find(this);
     if (it != ignoreSet.end())
@@ -1181,6 +1185,13 @@ void Structure::getPropertyNames(PropertyNameArray& propertyNames, EnumerationMo
     }
 }
 
+void Structure::initializeThreading()
+{
+#if !defined(NDEBUG) && ENABLE(JSC_MULTIPLE_THREADS)
+    ignoreSetMutex();
+#endif
+}
+
 #if DO_PROPERTYMAP_CONSTENCY_CHECK
 
 void Structure::checkConsistency()
index ea860a0..9b42452 100644 (file)
@@ -136,6 +136,8 @@ namespace JSC {
 
         const ClassInfo* classInfo() const { return m_classInfo; }
 
+        static void initializeThreading();
+
     private:
         Structure(JSValue prototype, const TypeInfo&, unsigned anonymousSlotCount, const ClassInfo*);
         Structure(const Structure*);