]> git.saurik.com Git - apple/objc4.git/blobdiff - runtime/objc-arr.mm
objc4-493.11.tar.gz
[apple/objc4.git] / runtime / objc-arr.mm
index 0bcd995f255a36dd9585edfc828770bc9c4491d3..89a039ecb57e77adff8dbfba10d871b462af95a6 100644 (file)
@@ -130,6 +130,19 @@ public:
             new (&table_buf[i * SIDE_TABLE_SIZE]) SideTable;
         }
     }
+    
+    static bool noLocksHeld(void) {
+        bool gotAll = true;
+        for (int i = 0; i < SIDE_TABLE_STRIPE && gotAll; i++) {
+            SideTable *s = (SideTable *)(&table_buf[i * SIDE_TABLE_SIZE]);
+            if (OSSpinLockTry(&s->slock)) {
+                OSSpinLockUnlock(&s->slock);
+            } else {
+                gotAll = false;
+            }
+        }
+        return gotAll;
+    }
 };
 
 STATIC_ASSERT(sizeof(SideTable) <= SIDE_TABLE_SIZE);
@@ -142,6 +155,10 @@ SideTable::table_buf[SIDE_TABLE_STRIPE * SIDE_TABLE_SIZE];
 // anonymous namespace
 };
 
+bool noSideTableLocksHeld(void)
+{
+    return SideTable::noLocksHeld();
+}
 
 //
 // The -fobjc-arr flag causes the compiler to issue calls to objc_{retain/release/autorelease/retain_block}