ObjFW  Check-in [5abd9baa33]

Overview
Comment:Free memory when the last pool has been drained.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 5abd9baa333c7b12a1211caf86f9483dbe940b016c119a3b05b9f335d9faa561
User & Date: js on 2012-07-16 12:19:59
Other Links: manifest | tags
Context
2012-07-16
22:44
Don't require extra parentheses for OF_(UN)LIKELY. check-in: ff8b2a6c29 user: js tags: trunk
12:19
Free memory when the last pool has been drained. check-in: 5abd9baa33 user: js tags: trunk
2012-07-15
00:54
Fix a memory leak. check-in: f772f8c188 user: js tags: trunk
Changes

Modified src/OFAutoreleasePool.m from [20bd5ed7f7] to [6326631fd1].

86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

		pool = objc_autoreleasePoolPush();

		if (first == NULL)
#ifdef OF_COMPILER_TLS
			first = pool;
#else
			if (!of_tlskey_set(firstKey, pool))
				@throw [OFInitializationFailedException
				    exceptionWithClass: [self class]];
#endif

		_objc_rootAutorelease(self);
	} @catch (id e) {
		[self release];
		@throw e;
	}







|
<
<







86
87
88
89
90
91
92
93


94
95
96
97
98
99
100

		pool = objc_autoreleasePoolPush();

		if (first == NULL)
#ifdef OF_COMPILER_TLS
			first = pool;
#else
			assert(of_tlskey_set(firstKey, pool));


#endif

		_objc_rootAutorelease(self);
	} @catch (id e) {
		[self release];
		@throw e;
	}

Modified src/runtime/autorelease.m from [0fa16a5970] to [43d183da0e].

72
73
74
75
76
77
78

79




80

81

82
83
84
85
86
87
88
89
#endif
	id *pool = objects + (ptrdiff_t)offset;
	id *iter;

	for (iter = pool; iter < top; iter++)
		[*iter release];


#ifdef OF_COMPILER_TLS




	top = pool;

#else

	if (!of_tlskey_set(topKey, pool))
		ERROR("Failed to set TLS key!")
#endif
}

id
_objc_rootAutorelease(id object)
{







>
|
>
>
>
>
|
>
|
>
|







72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#endif
	id *pool = objects + (ptrdiff_t)offset;
	id *iter;

	for (iter = pool; iter < top; iter++)
		[*iter release];

	top = pool;

	if (top == objects) {
		free(objects);

		objects = NULL;
		top = NULL;
	}

#ifndef OF_COMPILER_TLS
	if (!of_tlskey_set(objectsKey, objects) ||!of_tlskey_set(topKey, top))
		ERROR("Failed to set TLS key!")
#endif
}

id
_objc_rootAutorelease(id object)
{