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*))
4545
4646extern void _NSConcreteMallocBlock;
4747extern void _NSConcreteStackBlock;
48- extern void _NSConcreteGlobalBlock;
48+ extern struct objc_class _NSConcreteGlobalBlock;
4949
5050@interface NSAutoreleasePool
5151+ (Class )class ;
@@ -190,6 +190,12 @@ static inline id retain(id obj)
190190{
191191 if (isSmallObject (obj)) { return obj; }
192192 Class cls = obj->isa ;
193+
194+ if ((Class )&_NSConcreteGlobalBlock == cls->isa )
195+ {
196+ cls = cls->isa ;
197+ }
198+
193199 if ((Class )&_NSConcreteMallocBlock == cls ||
194200 (Class )&_NSConcreteStackBlock == cls)
195201 {
@@ -214,13 +220,14 @@ static inline void release(id obj)
214220{
215221 if (isSmallObject (obj)) { return ; }
216222 Class cls = obj->isa ;
223+
217224 if (cls == &_NSConcreteMallocBlock)
218225 {
219226 _Block_release (obj);
220227 return ;
221228 }
222229 if ((cls == &_NSConcreteStackBlock) ||
223- (cls == &_NSConcreteGlobalBlock))
230+ (cls-> isa == &_NSConcreteGlobalBlock))
224231 {
225232 return ;
226233 }
Original file line number Diff line number Diff line change @@ -300,6 +300,10 @@ static inline Class classForObject(id obj)
300300 return SmallObjectClasses [(addr & OBJC_SMALL_OBJECT_MASK )];
301301 }
302302 }
303+ extern struct objc_class _NSConcreteGlobalBlock ;
304+ if (obj -> isa -> isa == (Class )& _NSConcreteGlobalBlock ) {
305+ return (Class )& _NSConcreteGlobalBlock ;
306+ }
303307 return obj -> isa ;
304308}
305309
You can’t perform that action at this time.
0 commit comments