File tree Expand file tree Collapse file tree 2 files changed +13
-2
lines changed Expand file tree Collapse file tree 2 files changed +13
-2
lines changed Original file line number Diff line number Diff line change @@ -45,7 +45,7 @@ static inline DWORD arc_tls_key_create(void WINAPI(*cleanupFunction)(void*))
45
45
46
46
extern void _NSConcreteMallocBlock;
47
47
extern void _NSConcreteStackBlock;
48
- extern void _NSConcreteGlobalBlock;
48
+ extern struct objc_class _NSConcreteGlobalBlock;
49
49
50
50
@interface NSAutoreleasePool
51
51
+ (Class )class ;
@@ -190,6 +190,12 @@ static inline id retain(id obj)
190
190
{
191
191
if (isSmallObject (obj)) { return obj; }
192
192
Class cls = obj->isa ;
193
+
194
+ if ((Class )&_NSConcreteGlobalBlock == cls->isa )
195
+ {
196
+ cls = cls->isa ;
197
+ }
198
+
193
199
if ((Class )&_NSConcreteMallocBlock == cls ||
194
200
(Class )&_NSConcreteStackBlock == cls)
195
201
{
@@ -214,13 +220,14 @@ static inline void release(id obj)
214
220
{
215
221
if (isSmallObject (obj)) { return ; }
216
222
Class cls = obj->isa ;
223
+
217
224
if (cls == &_NSConcreteMallocBlock)
218
225
{
219
226
_Block_release (obj);
220
227
return ;
221
228
}
222
229
if ((cls == &_NSConcreteStackBlock) ||
223
- (cls == &_NSConcreteGlobalBlock))
230
+ (cls-> isa == &_NSConcreteGlobalBlock))
224
231
{
225
232
return ;
226
233
}
Original file line number Diff line number Diff line change @@ -300,6 +300,10 @@ static inline Class classForObject(id obj)
300
300
return SmallObjectClasses [(addr & OBJC_SMALL_OBJECT_MASK )];
301
301
}
302
302
}
303
+ extern struct objc_class _NSConcreteGlobalBlock ;
304
+ if (obj -> isa -> isa == (Class )& _NSConcreteGlobalBlock ) {
305
+ return (Class )& _NSConcreteGlobalBlock ;
306
+ }
303
307
return obj -> isa ;
304
308
}
305
309
You can’t perform that action at this time.
0 commit comments