Merge pull request #63 from Microsoft/assocloss

always look beyond the first page of associated objects
main
davidchisnall 8 years ago committed by GitHub
commit b8badbb28e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,4 +1,6 @@
#include "Test.h"
#include <stdio.h>
#include <inttypes.h>
static BOOL deallocCalled = NO;
static const char* objc_setAssociatedObjectKey = "objc_setAssociatedObjectKey";
@ -36,4 +38,24 @@ int main(void)
[holder release];
assert(deallocCalled);
object = [Associated new];
holder = [Test new];
for (uintptr_t i = 1; i <= 20; ++i)
{
objc_setAssociatedObject(holder, (void*)i, object, OBJC_ASSOCIATION_RETAIN);
}
int lost = 0;
for (uintptr_t i = 1; i <= 20; ++i)
{
if (object != objc_getAssociatedObject(holder, (void*)i))
{
fprintf(stderr, "lost object %" PRIuPTR "\n", i);
++lost;
}
}
[holder release];
[object release];
assert(0 == lost);
return 0;
}

@ -75,14 +75,16 @@ static BOOL isAtomic(uintptr_t policy)
static struct reference* findReference(struct reference_list *list, void *key)
{
if (NULL == list) { return NULL; }
for (int i=0 ; i<REFERENCE_LIST_SIZE ; i++)
while (list)
{
if (list->list[i].key == key)
for (int i=0 ; i<REFERENCE_LIST_SIZE ; i++)
{
return &list->list[i];
if (list->list[i].key == key)
{
return &list->list[i];
}
}
list = list->next;
}
return NULL;
}

Loading…
Cancel
Save