Commit ef7ed5df by Nicola Pero Committed by Nicola Pero

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
parent 6f468984
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,
__objc_init_selector_tables, __objc_register_selectors_from_class,
__objc_register_selectors_from_list,
......
......@@ -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)];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment