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
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);

			/* 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;
437
438
439
440
441
442
443

444

445
446
447
448
449
450
451
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);
		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
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)
	    (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