Changeset 46431 in webkit for trunk/JavaScriptCore/runtime
- Timestamp:
- Jul 27, 2009, 3:07:26 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/runtime
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/Collector.cpp
r46266 r46431 171 171 void Heap::destroy() 172 172 { 173 JSLock lock( false);173 JSLock lock(SilenceAssertionsOnly); 174 174 175 175 if (!m_globalData) -
trunk/JavaScriptCore/runtime/JSLock.cpp
r44224 r46431 61 61 62 62 JSLock::JSLock(ExecState* exec) 63 : m_lock ingForReal(exec->globalData().isSharedInstance)64 { 65 lock(m_lock ingForReal);66 } 67 68 void JSLock::lock( bool lockForReal)63 : m_lockBehavior(exec->globalData().isSharedInstance ? LockForReal : SilenceAssertionsOnly) 64 { 65 lock(m_lockBehavior); 66 } 67 68 void JSLock::lock(JSLockBehavior lockBehavior) 69 69 { 70 70 #ifdef NDEBUG 71 71 // Locking "not for real" is a debug-only feature. 72 if ( !lockForReal)72 if (lockBehavior == SilenceAssertionsOnly) 73 73 return; 74 74 #endif … … 77 77 78 78 intptr_t currentLockCount = lockCount(); 79 if (!currentLockCount && lock ForReal) {79 if (!currentLockCount && lockBehavior == LockForReal) { 80 80 int result; 81 81 result = pthread_mutex_lock(&JSMutex); … … 85 85 } 86 86 87 void JSLock::unlock( bool lockForReal)87 void JSLock::unlock(JSLockBehavior lockBehavior) 88 88 { 89 89 ASSERT(lockCount()); … … 91 91 #ifdef NDEBUG 92 92 // Locking "not for real" is a debug-only feature. 93 if ( !lockForReal)93 if (lockBehavior == SilenceAssertionsOnly) 94 94 return; 95 95 #endif … … 97 97 intptr_t newLockCount = lockCount() - 1; 98 98 setLockCount(newLockCount); 99 if (!newLockCount && lock ForReal) {99 if (!newLockCount && lockBehavior == LockForReal) { 100 100 int result; 101 101 result = pthread_mutex_unlock(&JSMutex); … … 106 106 void JSLock::lock(ExecState* exec) 107 107 { 108 lock(exec->globalData().isSharedInstance );108 lock(exec->globalData().isSharedInstance ? LockForReal : SilenceAssertionsOnly); 109 109 } 110 110 111 111 void JSLock::unlock(ExecState* exec) 112 112 { 113 unlock(exec->globalData().isSharedInstance );113 unlock(exec->globalData().isSharedInstance ? LockForReal : SilenceAssertionsOnly); 114 114 } 115 115 … … 163 163 164 164 JSLock::DropAllLocks::DropAllLocks(ExecState* exec) 165 : m_lock ingForReal(exec->globalData().isSharedInstance)165 : m_lockBehavior(exec->globalData().isSharedInstance ? LockForReal : SilenceAssertionsOnly) 166 166 { 167 167 pthread_once(&createJSLockCountOnce, createJSLockCount); … … 174 174 m_lockCount = JSLock::lockCount(); 175 175 for (intptr_t i = 0; i < m_lockCount; i++) 176 JSLock::unlock(m_lock ingForReal);177 } 178 179 JSLock::DropAllLocks::DropAllLocks( bool lockingForReal)180 : m_lock ingForReal(lockingForReal)176 JSLock::unlock(m_lockBehavior); 177 } 178 179 JSLock::DropAllLocks::DropAllLocks(JSLockBehavior JSLockBehavior) 180 : m_lockBehavior(JSLockBehavior) 181 181 { 182 182 pthread_once(&createJSLockCountOnce, createJSLockCount); … … 192 192 m_lockCount = JSLock::lockCount(); 193 193 for (intptr_t i = 0; i < m_lockCount; i++) 194 JSLock::unlock(m_lock ingForReal);194 JSLock::unlock(m_lockBehavior); 195 195 } 196 196 … … 198 198 { 199 199 for (intptr_t i = 0; i < m_lockCount; i++) 200 JSLock::lock(m_lock ingForReal);200 JSLock::lock(m_lockBehavior); 201 201 202 202 --lockDropDepth; … … 206 206 207 207 JSLock::JSLock(ExecState*) 208 : m_lock ingForReal(false)208 : m_lockBehavior(false) 209 209 { 210 210 } … … 222 222 } 223 223 224 void JSLock::lock( bool)225 { 226 } 227 228 void JSLock::unlock( bool)224 void JSLock::lock(JSLockBehavior) 225 { 226 } 227 228 void JSLock::unlock(JSLockBehavior) 229 229 { 230 230 } … … 242 242 } 243 243 244 JSLock::DropAllLocks::DropAllLocks( bool)244 JSLock::DropAllLocks::DropAllLocks(JSLockBehavior) 245 245 { 246 246 } -
trunk/JavaScriptCore/runtime/JSLock.h
r45891 r46431 51 51 class ExecState; 52 52 53 enum JSLockBehavior { SilenceAssertionsOnly, LockForReal }; 54 53 55 class JSLock : public Noncopyable { 54 56 public: 55 57 JSLock(ExecState*); 56 58 57 JSLock( bool lockingForReal)58 : m_lock ingForReal(lockingForReal)59 JSLock(JSLockBehavior lockBehavior) 60 : m_lockBehavior(lockBehavior) 59 61 { 60 62 #ifdef NDEBUG 61 63 // Locking "not for real" is a debug-only feature. 62 if ( !lockingForReal)64 if (lockBehavior == SilenceAssertionsOnly) 63 65 return; 64 66 #endif 65 lock(lock ingForReal);67 lock(lockBehavior); 66 68 } 67 69 … … 70 72 #ifdef NDEBUG 71 73 // Locking "not for real" is a debug-only feature. 72 if ( !m_lockingForReal)74 if (lockBehavior == SilenceAssertionsOnly) 73 75 return; 74 76 #endif 75 unlock(m_lock ingForReal);77 unlock(m_lockBehavior); 76 78 } 77 79 78 static void lock( bool);79 static void unlock( bool);80 static void lock(JSLockBehavior); 81 static void unlock(JSLockBehavior); 80 82 static void lock(ExecState*); 81 83 static void unlock(ExecState*); … … 84 86 static bool currentThreadIsHoldingLock(); 85 87 86 bool m_lockingForReal;88 JSLockBehavior m_lockBehavior; 87 89 88 90 class DropAllLocks : public Noncopyable { 89 91 public: 90 92 DropAllLocks(ExecState* exec); 91 DropAllLocks( bool);93 DropAllLocks(JSLockBehavior); 92 94 ~DropAllLocks(); 93 95 94 96 private: 95 97 intptr_t m_lockCount; 96 bool m_lockingForReal;98 JSLockBehavior m_lockBehavior; 97 99 }; 98 100 };
Note:
See TracChangeset
for help on using the changeset viewer.