Reviewed by Darin Adler.
authorap@webkit.org <ap@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Oct 2008 06:41:08 +0000 (06:41 +0000)
committerap@webkit.org <ap@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Oct 2008 06:41:08 +0000 (06:41 +0000)
        https://bugs.webkit.org/show_bug.cgi?id=21610
        run-webkit-threads --threaded crashes in StructureID destructor

        * kjs/StructureID.cpp:
        (JSC::StructureID::StructureID):
        (JSC::StructureID::~StructureID):
        Protect access to a static (debug-only) HashSet with a lock.

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/StructureID.cpp

index 702e4aca634f63622f85cbc9c397c3866a54b2b2..02bb1321a4570bce3fc48f703392c0c413d6db00 100644 (file)
@@ -1,3 +1,15 @@
+2008-10-15  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin Adler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=21610
+        run-webkit-threads --threaded crashes in StructureID destructor
+
+        * kjs/StructureID.cpp:
+        (JSC::StructureID::StructureID):
+        (JSC::StructureID::~StructureID):
+        Protect access to a static (debug-only) HashSet with a lock.
+
 2008-10-15  Sam Weinig  <sam@webkit.org>
 
         Reviewed by Goeffrey Garen.
index 151cef1bda917aa63b9ab2491dc3bf88af4ec186..b2db9b9176b890d169fd73d50c4621d7a1b0be7f 100644 (file)
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/RefPtr.h>
 
+#if ENABLE(JSC_MULTIPLE_THREADS)
+#include <wtf/Threading.h>
+#endif
+
 using namespace std;
 
 namespace JSC {
@@ -40,6 +44,10 @@ namespace JSC {
 #ifndef NDEBUG
 static WTF::RefCountedLeakCounter structureIDCounter("StructureID");
 
+#if ENABLE(JSC_MULTIPLE_THREADS)
+static Mutex ignoreSetMutex;
+#endif
+
 static bool shouldIgnoreLeaks;
 static HashSet<StructureID*> ignoreSet;
 #endif
@@ -82,6 +90,9 @@ StructureID::StructureID(JSValue* prototype, const TypeInfo& typeInfo)
     m_transitions.singleTransition = 0;
 
 #ifndef NDEBUG
+#if ENABLE(JSC_MULTIPLE_THREADS)
+    MutexLocker protect(ignoreSetMutex);
+#endif
     if (shouldIgnoreLeaks)
         ignoreSet.add(this);
     else
@@ -115,6 +126,9 @@ StructureID::~StructureID()
         delete m_transitions.table;
 
 #ifndef NDEBUG
+#if ENABLE(JSC_MULTIPLE_THREADS)
+    MutexLocker protect(ignoreSetMutex);
+#endif
     HashSet<StructureID*>::iterator it = ignoreSet.find(this);
     if (it != ignoreSet.end())
         ignoreSet.remove(it);