Changeset 20351 in webkit for trunk/JavaScriptCore/kjs/JSLock.cpp


Ignore:
Timestamp:
Mar 20, 2007, 4:57:01 PM (18 years ago)
Author:
mjs
Message:

Reviewed by Geoff and Adam.



  • fixed a threadsafety bug discovered by testing this


  • enhanced threadsafety assertions in collector
  • API/JSCallbackObject.cpp: (KJS::JSCallbackObject::~JSCallbackObject): This destructor can't DropAllLocks around the finalize callback, because it gets called from garbage collection and we can't let other threads collect!
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • kjs/JSLock.cpp: (KJS::JSLock::currentThreadIsHoldingLock): Added new function to allow stronger assertions than just that the lock is held by some thread (you can now assert that the current thread is holding it, given the new JSLock design).
  • kjs/JSLock.h:
  • kjs/collector.cpp: Refactored for portability plus added some stronger assertions. (KJS::Collector::allocate): (KJS::currentThreadStackBase): (KJS::Collector::registerAsMainThread): (KJS::onMainThread): (KJS::PlatformThread::PlatformThread): (KJS::getCurrentPlatformThread): (KJS::Collector::Thread::Thread): (KJS::destroyRegisteredThread): (KJS::Collector::registerThread): (KJS::Collector::markCurrentThreadConservatively): (KJS::suspendThread): (KJS::resumeThread): (KJS::getPlatformThreadRegisters): (KJS::otherThreadStackPointer): (KJS::otherThreadStackBase): (KJS::Collector::markOtherThreadConservatively): (KJS::Collector::markStackObjectsConservatively): (KJS::Collector::protect): (KJS::Collector::unprotect): (KJS::Collector::collectOnMainThreadOnly): (KJS::Collector::markMainThreadOnlyObjects): (KJS::Collector::collect):
  • kjs/collector.h:
  • wtf/FastMalloc.cpp: (WTF::fastMallocSetIsMultiThreaded):
  • wtf/FastMallocInternal.h:
  • wtf/Platform.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/JSLock.cpp

    r20115 r20351  
    2525
    2626#include "collector.h"
     27#if USE(MULTIPLE_THREADS)
     28#include <pthread.h>
     29#endif
    2730
    2831namespace KJS {
     
    6669        pthread_mutex_unlock(&JSMutex);
    6770    }
     71}
     72
     73bool JSLock::currentThreadIsHoldingLock()
     74{
     75    pthread_once(&createDidLockJSMutexOnce, createDidLockJSMutex);
     76    return !!pthread_getspecific(didLockJSMutex);
    6877}
    6978
Note: See TracChangeset for help on using the changeset viewer.