Index: src/autorelease.m ================================================================== --- src/autorelease.m +++ src/autorelease.m @@ -37,12 +37,12 @@ static void __attribute__((constructor)) init(void) { OF_ENSURE(of_tlskey_new(&objectsKey)); - OF_ENSURE(of_tlskey_new(&sizeKey)); OF_ENSURE(of_tlskey_new(&topKey)); + OF_ENSURE(of_tlskey_new(&sizeKey)); } #endif void* objc_autoreleasePoolPush() @@ -77,12 +77,12 @@ objects = NULL; top = NULL; } #ifndef OF_COMPILER_TLS - OF_ENSURE(of_tlskey_set(objectsKey, objects)); OF_ENSURE(of_tlskey_set(topKey, top)); + OF_ENSURE(of_tlskey_set(objectsKey, objects)); #endif } id _objc_rootAutorelease(id object) @@ -94,18 +94,17 @@ #endif if (objects == NULL) { OF_ENSURE((objects = malloc(of_pagesize)) != NULL); + top = objects; + size = of_pagesize; + #ifndef OF_COMPILER_TLS OF_ENSURE(of_tlskey_set(objectsKey, objects)); - OF_ENSURE(of_tlskey_set(sizeKey, - (void*)(uintptr_t)of_pagesize)); + OF_ENSURE(of_tlskey_set(sizeKey, (void*)(uintptr_t)size)); #endif - - top = objects; - size = of_pagesize; } if ((uintptr_t)top >= (uintptr_t)objects + size) { ptrdiff_t diff = top - objects; @@ -122,10 +121,10 @@ *top = object; top++; #ifndef OF_COMPILER_TLS - OF_ENSURE(of_tlskey_set(topKey, objects)); + OF_ENSURE(of_tlskey_set(topKey, top)); #endif return object; }