ObjFW  Check-in [7caa622124]

Overview
Comment:Fix reference counting for blocks.

Hopefully, there is no weird situation left where it fails...

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | 0.5
Files: files | file ages | folders
SHA3-256: 7caa6221243c7300b1615c0b5e2f27f9afee95bad37082019121cf4078be8cbc
User & Date: js on 2011-07-18 03:01:36
Other Links: branch diff | manifest | tags
Context
2011-07-18
23:47
Fix a bug (hopefully the last!) in blocks. check-in: 86169923d6 user: js tags: 0.5
03:01
Fix reference counting for blocks. check-in: 7caa622124 user: js tags: 0.5
2011-07-17
16:25
Update PLATFORMS. check-in: fcc184b84d user: js tags: 0.5
Changes

Modified src/OFBlock.m from [b9b5eda4af] to [52c8c831cc].

264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
			}

			if (src->forwarding == src)
				src->forwarding = *dst;

			memcpy(*dst, src, src->size);

			/* src->forwarding points to us -> that's a reference */
			(*dst)->flags++;

			if (src->size >= sizeof(of_block_byref_t))
				src->byref_keep(*dst, src);
		} else
			*dst = src;

		(*dst)->flags++;
		break;







<
<
<







264
265
266
267
268
269
270



271
272
273
274
275
276
277
			}

			if (src->forwarding == src)
				src->forwarding = *dst;

			memcpy(*dst, src, src->size);




			if (src->size >= sizeof(of_block_byref_t))
				src->byref_keep(*dst, src);
		} else
			*dst = src;

		(*dst)->flags++;
		break;
437
438
439
440
441
442
443

444
445
446
447
448
449
450
451
		    OF_BLOCK_REFCOUNT_MASK;

	return OF_RETAIN_COUNT_MAX;
}

- (void)release
{

	Block_release(self);
}

- (void)dealloc
{
	@throw [OFNotImplementedException newWithClass: isa
					      selector: _cmd];
	[super dealloc];	/* Get rid of a stupid warning */







>
|







434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
		    OF_BLOCK_REFCOUNT_MASK;

	return OF_RETAIN_COUNT_MAX;
}

- (void)release
{
	if (isa == (Class)&_NSConcreteMallocBlock)
		Block_release(self);
}

- (void)dealloc
{
	@throw [OFNotImplementedException newWithClass: isa
					      selector: _cmd];
	[super dealloc];	/* Get rid of a stupid warning */

Modified tests/OFBlockTests.m from [10c79b74fc] to [0518f13692].

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
	    (m = [[s copy] autorelease]) &&
	    [m class] == objc_getClass("OFMallocBlock") &&
	    [m isKindOfClass: [OFBlock class]])

	TEST(@"Copying a global block", (id)g == [[g copy] autorelease])

	TEST(@"Copying a malloc block",
	    (id)m == [[m copy] autorelease] && [m retainCount] == 2)

	TEST(@"Autorelease a stack block", R([s autorelease]))

	TEST(@"Autorelease a global block", R([g autorelease]))

	TEST(@"Autorelease a malloc block", R([m autorelease]))

	[pool drain];
}
@end







|










64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
	    (m = [[s copy] autorelease]) &&
	    [m class] == objc_getClass("OFMallocBlock") &&
	    [m isKindOfClass: [OFBlock class]])

	TEST(@"Copying a global block", (id)g == [[g copy] autorelease])

	TEST(@"Copying a malloc block",
	    (id)m == [m copy] && [m retainCount] == 2)

	TEST(@"Autorelease a stack block", R([s autorelease]))

	TEST(@"Autorelease a global block", R([g autorelease]))

	TEST(@"Autorelease a malloc block", R([m autorelease]))

	[pool drain];
}
@end