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:
parent
6f468984d8
commit
ef7ed5df72
@ -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>
|
2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||||
|
|
||||||
* objc-private/runtime.h (__objc_selector_max_index,
|
* objc-private/runtime.h (__objc_selector_max_index,
|
||||||
|
@ -106,8 +106,18 @@ objc_getProperty (id self, SEL __attribute__((unused)) _cmd, ptrdiff_t offset, B
|
|||||||
{
|
{
|
||||||
id *pointer_to_ivar = (id *)((char *)self + offset);
|
id *pointer_to_ivar = (id *)((char *)self + offset);
|
||||||
|
|
||||||
|
|
||||||
if (is_atomic == NO)
|
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
|
else
|
||||||
{
|
{
|
||||||
objc_mutex_t lock = accessors_locks[ACCESSORS_HASH (pointer_to_ivar)];
|
objc_mutex_t lock = accessors_locks[ACCESSORS_HASH (pointer_to_ivar)];
|
||||||
|
Loading…
Reference in New Issue
Block a user