Changeset 66741 in webkit for trunk/JavaScriptCore/wtf/FastMalloc.cpp
- Timestamp:
- Sep 3, 2010, 11:02:51 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/wtf/FastMalloc.cpp
r66538 r66741 1493 1493 void TCMalloc_PageHeap::initializeScavenger() 1494 1494 { 1495 pthread_mutex_init(&m_scavengeMutex, 0); 1496 pthread_cond_init(&m_scavengeCondition, 0); 1497 m_scavengeThreadActive = true; 1498 pthread_t thread; 1499 pthread_create(&thread, 0, runScavengerThread, this); 1495 // Create a non-recursive mutex. 1496 #if PTHREAD_MUTEX_NORMAL == PTHREAD_MUTEX_DEFAULT 1497 pthread_mutex_init(&m_scavengeMutex, 0); 1498 #else 1499 pthread_mutexattr_t attr; 1500 pthread_mutexattr_init(&attr); 1501 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL); 1502 1503 pthread_mutex_init(&m_scavengeMutex, &attr); 1504 1505 pthread_mutexattr_destroy(&attr); 1506 #endif 1507 1508 pthread_cond_init(&m_scavengeCondition, 0); 1509 m_scavengeThreadActive = true; 1510 pthread_t thread; 1511 pthread_create(&thread, 0, runScavengerThread, this); 1500 1512 } 1501 1513 … … 1511 1523 ALWAYS_INLINE void TCMalloc_PageHeap::signalScavenger() 1512 1524 { 1513 if (!m_scavengeThreadActive && shouldScavenge()) 1514 pthread_cond_signal(&m_scavengeCondition); 1525 // m_scavengeMutex should be held before accessing m_scavengeThreadActive. 1526 ASSERT(pthread_mutex_trylock(m_scavengeMutex)); 1527 if (!m_scavengeThreadActive && shouldScavenge()) 1528 pthread_cond_signal(&m_scavengeCondition); 1515 1529 } 1516 1530 … … 1529 1543 ALWAYS_INLINE void TCMalloc_PageHeap::signalScavenger() 1530 1544 { 1531 if (!m_scavengingScheduled && shouldScavenge()) { 1532 m_scavengingScheduled = true; 1533 dispatch_resume(m_scavengeTimer); 1534 } 1545 ASSERT(IsHeld(pageheap_lock)); 1546 if (!m_scavengingScheduled && shouldScavenge()) { 1547 m_scavengingScheduled = true; 1548 dispatch_resume(m_scavengeTimer); 1549 } 1535 1550 } 1536 1551 … … 2398 2413 void TCMalloc_PageHeap::periodicScavenge() 2399 2414 { 2400 {2401 2415 SpinLockHolder h(&pageheap_lock); 2402 2416 pageheap->scavenge(); 2403 } 2404 2405 if (!shouldScavenge()) { 2406 m_scavengingScheduled = false; 2407 dispatch_suspend(m_scavengeTimer); 2408 } 2417 2418 if (!shouldScavenge()) { 2419 m_scavengingScheduled = false; 2420 dispatch_suspend(m_scavengeTimer); 2421 } 2409 2422 } 2410 2423 #endif // HAVE(DISPATCH_H)
Note:
See TracChangeset
for help on using the changeset viewer.