In libobjc/: 2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>

In libobjc/:
2010-12-19  Nicola Pero  <nicola.pero@meta-innovation.com>

	PR libobjc/47012
	* accessors.m (objc_getProperty): If not atomic, do not
	retain/autorelease the returned value. (Problem reported by

From-SVN: r168070
This commit is contained in:
Nicola Pero 2010-12-19 19:10:26 +00:00 committed by Nicola Pero
parent 6f468984d8
commit ef7ed5df72
2 changed files with 17 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
PR libobjc/47012
* accessors.m (objc_getProperty): If not atomic, do not
retain/autorelease the returned value. (Problem reported by
2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-private/runtime.h (__objc_selector_max_index,

View File

@ -106,8 +106,18 @@ objc_getProperty (id self, SEL __attribute__((unused)) _cmd, ptrdiff_t offset, B
{
id *pointer_to_ivar = (id *)((char *)self + offset);
if (is_atomic == NO)
return AUTORELEASE (RETAIN (*pointer_to_ivar));
{
/* Note that in this case, we do not RETAIN/AUTORELEASE the
returned value. The programmer should do it if it is
needed. Since access is non-atomic, other threads can be
ignored and the caller has full control of what happens
to the object and whether it needs to be RETAINed or not,
so it makes sense to leave the decision to him/her. This
is also what the Apple/NeXT runtime does. */
return *pointer_to_ivar;
}
else
{
objc_mutex_t lock = accessors_locks[ACCESSORS_HASH (pointer_to_ivar)];