double retain bugfix

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@36762 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2013-06-27 06:42:42 +00:00
parent 47157eb621
commit 6f9ad53449
2 changed files with 32 additions and 12 deletions

View file

@ -1,3 +1,8 @@
2013-06-27 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSConcreteMapTable.m: attempt to fix double retain bug
introduced by clang/ARC changes.
2013-06-24 Wolfgang Lux <wolfgang.lux@gmail.com>
* Tools/AGSIndex.m (mergeDictionaries): Fix typo in warning.

View file

@ -98,27 +98,42 @@ typedef GSIMapNode_t *GSIMapNode;
(M->legacy ? M->cb.old.v.retain(M, X.ptr) \
: pointerFunctionsAcquire(&M->cb.pf.v, &X.ptr, X.ptr))
/* 2013-05-25 Here are the macros originally added for GC/ARC ...
* but they caused map table entries to be doubly retained :-(
* The question is, are the new versions I hacked in below to
* fix this correct?
#define GSI_MAP_WRITE_KEY(M, addr, x) \
if (M->legacy) \
*(addr) = x;\
*(addr) = x;\
else\
pointerFunctionsAssign(&M->cb.pf.k, (void**)addr, (x).obj);
pointerFunctionsAssign(&M->cb.pf.k, (void**)addr, (x).obj);
#define GSI_MAP_WRITE_VAL(M, addr, x) \
if (M->legacy) \
*(addr) = x;\
*(addr) = x;\
else\
pointerFunctionsAssign(&M->cb.pf.v, (void**)addr, (x).obj);
pointerFunctionsAssign(&M->cb.pf.v, (void**)addr, (x).obj);
*/
#define GSI_MAP_WRITE_KEY(M, addr, x) \
if (M->legacy) \
*(addr) = x;\
else\
*(id*)(addr) = (x).obj;
#define GSI_MAP_WRITE_VAL(M, addr, x) \
if (M->legacy) \
*(addr) = x;\
else\
*(id*)(addr) = (x).obj;
#define GSI_MAP_READ_KEY(M,addr) \
(M->legacy ? *(addr) :\
(typeof(*addr))pointerFunctionsRead(&M->cb.pf.k, (void**)addr))
(M->legacy ? *(addr)\
: (typeof(*addr))pointerFunctionsRead(&M->cb.pf.k, (void**)addr))
#define GSI_MAP_READ_VALUE(M,addr) \
(M->legacy ? *(addr) :\
(typeof(*addr))pointerFunctionsRead(&M->cb.pf.v, (void**)addr))
(M->legacy ? *(addr)\
: (typeof(*addr))pointerFunctionsRead(&M->cb.pf.v, (void**)addr))
#define GSI_MAP_ZEROED(M)\
(M->legacy ? 0 \
: (((M->cb.pf.k.options | M->cb.pf.v.options) & NSPointerFunctionsZeroingWeakMemory) ?\
YES : NO))
(M->legacy ? 0\
: (((M->cb.pf.k.options | M->cb.pf.v.options)\
& NSPointerFunctionsZeroingWeakMemory) ? YES : NO))
#define GSI_MAP_ENUMERATOR NSMapEnumerator