ObjFW  Diff

Differences From Artifact [4c0a8350b3]:

  • File src/OFThread.h — part of check-in [e7f4f80e23] at 2020-01-24 03:03:32 on branch trunk — runtime: Correctly handle AR pool push during pop

    Getting a pointer and increasing it until we reach the top pointer does
    not work: Releasing an object can temporarily create new autorelease
    pools, which can trigger resizing of "objects" using realloc, which can
    move it to a different address, which will then lead to continuing to
    iterate on a now invalid pointer.

    This is now solved by using an index into "objects" instead. Since we're
    now indexing for the pop, let's use indexes everywhere, as they're more
    readable anyway.

    While debugging this, I noticed that the last pool is popped quite
    frequently, only for a new pool to be pushed immediately again. This
    resulted in a free followed by a malloc every time. Instead, keep the
    pool, but let OFThread explicitly say when to free everything. (user: js, size: 7892) [annotate] [blame] [check-ins using] [more...]

To Artifact [e49332cd5c]:


84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
	bool _supportsSockets;
	OFRunLoop *_Nullable _runLoop;
	OFMutableDictionary *_threadDictionary;
	OFString *_Nullable _name;
# ifdef OF_HAVE_SOCKETS
	OFDNSResolver *_DNSResolver;
# endif
	OF_RESERVE_IVARS(4)
}
#endif

#ifdef OF_HAVE_CLASS_PROPERTIES
# ifdef OF_HAVE_THREADS
@property (class, readonly, nullable, nonatomic) OFThread *currentThread;
@property (class, readonly, nullable, nonatomic) OFThread *mainThread;







|







84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
	bool _supportsSockets;
	OFRunLoop *_Nullable _runLoop;
	OFMutableDictionary *_threadDictionary;
	OFString *_Nullable _name;
# ifdef OF_HAVE_SOCKETS
	OFDNSResolver *_DNSResolver;
# endif
	OF_RESERVE_IVARS(OFThread, 4)
}
#endif

#ifdef OF_HAVE_CLASS_PROPERTIES
# ifdef OF_HAVE_THREADS
@property (class, readonly, nullable, nonatomic) OFThread *currentThread;
@property (class, readonly, nullable, nonatomic) OFThread *mainThread;