mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
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:
parent
47157eb621
commit
6f9ad53449
2 changed files with 32 additions and 12 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue