Changeset 49280 in webkit for trunk/JavaScriptCore/runtime/Collector.cpp
- Timestamp:
- Oct 7, 2009, 6:46:07 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/Collector.cpp
r48854 r49280 981 981 } 982 982 983 void Heap::setGCProtectNeedsLocking()984 {985 // Most clients do not need to call this, with the notable exception of WebCore.986 // Clients that use shared heap have JSLock protection, while others are supposed987 // to do explicit locking. WebCore violates this contract in Database code,988 // which calls gcUnprotect from a secondary thread.989 if (!m_protectedValuesMutex)990 m_protectedValuesMutex.set(new Mutex);991 }992 993 983 void Heap::protect(JSValue k) 994 984 { … … 999 989 return; 1000 990 1001 if (m_protectedValuesMutex)1002 m_protectedValuesMutex->lock();1003 1004 991 m_protectedValues.add(k.asCell()); 1005 1006 if (m_protectedValuesMutex)1007 m_protectedValuesMutex->unlock();1008 992 } 1009 993 … … 1016 1000 return; 1017 1001 1018 if (m_protectedValuesMutex)1019 m_protectedValuesMutex->lock();1020 1021 1002 m_protectedValues.remove(k.asCell()); 1022 1023 if (m_protectedValuesMutex)1024 m_protectedValuesMutex->unlock();1025 1003 } 1026 1004 1027 1005 void Heap::markProtectedObjects(MarkStack& markStack) 1028 1006 { 1029 if (m_protectedValuesMutex)1030 m_protectedValuesMutex->lock();1031 1032 1007 ProtectCountSet::iterator end = m_protectedValues.end(); 1033 1008 for (ProtectCountSet::iterator it = m_protectedValues.begin(); it != end; ++it) { … … 1035 1010 markStack.drain(); 1036 1011 } 1037 1038 if (m_protectedValuesMutex)1039 m_protectedValuesMutex->unlock();1040 1012 } 1041 1013 … … 1229 1201 size_t Heap::protectedGlobalObjectCount() 1230 1202 { 1231 if (m_protectedValuesMutex)1232 m_protectedValuesMutex->lock();1233 1234 1203 size_t count = 0; 1235 1204 if (JSGlobalObject* head = m_globalData->head) { … … 1242 1211 } 1243 1212 1244 if (m_protectedValuesMutex)1245 m_protectedValuesMutex->unlock();1246 1247 1213 return count; 1248 1214 } … … 1250 1216 size_t Heap::protectedObjectCount() 1251 1217 { 1252 if (m_protectedValuesMutex) 1253 m_protectedValuesMutex->lock(); 1254 1255 size_t result = m_protectedValues.size(); 1256 1257 if (m_protectedValuesMutex) 1258 m_protectedValuesMutex->unlock(); 1259 1260 return result; 1218 return m_protectedValues.size(); 1261 1219 } 1262 1220 … … 1280 1238 HashCountedSet<const char*>* counts = new HashCountedSet<const char*>; 1281 1239 1282 if (m_protectedValuesMutex)1283 m_protectedValuesMutex->lock();1284 1285 1240 ProtectCountSet::iterator end = m_protectedValues.end(); 1286 1241 for (ProtectCountSet::iterator it = m_protectedValues.begin(); it != end; ++it) 1287 1242 counts->add(typeName(it->first)); 1288 1243 1289 if (m_protectedValuesMutex)1290 m_protectedValuesMutex->unlock();1291 1292 1244 return counts; 1293 1245 }
Note:
See TracChangeset
for help on using the changeset viewer.