Ignore:
Timestamp:
Sep 15, 2012, 11:08:18 PM (13 years ago)
Author:
[email protected]
Message:

Fixed JSLock to use the platform abstraction for Mutex instead of
depending on pthreads.
https://bugs.webkit.org/show_bug.cgi?id=96858.

Reviewed by Filip Pizlo.

This fixes a synchronization problem on the Windows port and makes
it more reliable when running the layout tests.

  • runtime/InitializeThreading.cpp:

(JSC::initializeThreadingOnce):

  • runtime/JSLock.cpp:

(JSC):
(JSC::GlobalJSLock::GlobalJSLock):
(JSC::GlobalJSLock::~GlobalJSLock):
(JSC::GlobalJSLock::initialize):

  • runtime/JSLock.h:

(GlobalJSLock):
(JSLock):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSLock.cpp

    r127202 r128704  
    3434namespace JSC {
    3535
    36 // JSLock is only needed to support an obsolete execution model where JavaScriptCore
    37 // automatically protected against concurrent access from multiple threads.
    38 // So it's safe to disable it on non-mac platforms where we don't have native pthreads.
    39 #if (OS(DARWIN) || USE(PTHREADS))
    40 
    41 static pthread_mutex_t sharedInstanceLock = PTHREAD_MUTEX_INITIALIZER;
     36Mutex* GlobalJSLock::s_sharedInstanceLock = 0;
    4237
    4338GlobalJSLock::GlobalJSLock()
    4439{
    45     pthread_mutex_lock(&sharedInstanceLock);
     40    s_sharedInstanceLock->lock();
    4641}
    4742
    4843GlobalJSLock::~GlobalJSLock()
    4944{
    50     pthread_mutex_unlock(&sharedInstanceLock);
     45    s_sharedInstanceLock->unlock();
     46}
     47
     48void GlobalJSLock::initialize()
     49{
     50    s_sharedInstanceLock = new Mutex();
    5151}
    5252
     
    217217}
    218218
    219 #else // (OS(DARWIN) || USE(PTHREADS))
    220 
    221 GlobalJSLock::GlobalJSLock()
    222 {
    223 }
    224 
    225 GlobalJSLock::~GlobalJSLock()
    226 {
    227 }
    228 
    229 JSLockHolder::JSLockHolder(JSGlobalData*)
    230 {
    231 }
    232 
    233 JSLockHolder::JSLockHolder(JSGlobalData&)
    234 {
    235 }
    236 
    237 JSLockHolder::JSLockHolder(ExecState*)
    238 {
    239 }
    240 
    241 JSLockHolder::~JSLockHolder()
    242 {
    243 }
    244 
    245 JSLock::JSLock()
    246 {
    247 }
    248 
    249 JSLock::~JSLock()
    250 {
    251 }
    252 
    253 bool JSLock::currentThreadIsHoldingLock()
    254 {
    255     return true;
    256 }
    257 
    258 void JSLock::lock()
    259 {
    260 }
    261 
    262 void JSLock::unlock()
    263 {
    264 }
    265 
    266 void JSLock::lock(ExecState*)
    267 {
    268 }
    269 
    270 void JSLock::unlock(ExecState*)
    271 {
    272 }
    273 
    274 void JSLock::lock(JSGlobalData&)
    275 {
    276 }
    277 
    278 void JSLock::unlock(JSGlobalData&)
    279 {
    280 }
    281 
    282 unsigned JSLock::dropAllLocks()
    283 {
    284     return 0;
    285 }
    286 
    287 unsigned JSLock::dropAllLocksUnconditionally()
    288 {
    289     return 0;
    290 }
    291 
    292 void JSLock::grabAllLocks(unsigned)
    293 {
    294 }
    295 
    296 JSLock::DropAllLocks::DropAllLocks(ExecState*)
    297 {
    298 }
    299 
    300 JSLock::DropAllLocks::DropAllLocks(JSGlobalData*)
    301 {
    302 }
    303 
    304 JSLock::DropAllLocks::~DropAllLocks()
    305 {
    306 }
    307 
    308 #endif // (OS(DARWIN) || USE(PTHREADS))
    309 
    310219} // namespace JSC
Note: See TracChangeset for help on using the changeset viewer.