adium-1.4 2575:8e1a93e30e94: Cherry-picked cfd0dfdbbb54 from adi...

commits at adium.im commits at adium.im
Wed Aug 12 07:45:01 UTC 2009


details:	http://hg.adium.im/adium-1.4/rev/8e1a93e30e94
revision:	2575:8e1a93e30e94
author:		Peter Hosey <hg at boredzo.org>
date:		Wed Aug 12 00:42:45 2009 -0700

Cherry-picked cfd0dfdbbb54 from adium: Make AMPurpleJabberNode's delegates property not retain the delegates. This fixes cyclic retention with the discovery browser.

diffs (43 lines):

diff -r 28d5a4352944 -r 8e1a93e30e94 Plugins/Purple Service/AMPurpleJabberNode.m
--- a/Plugins/Purple Service/AMPurpleJabberNode.m	Tue Aug 11 23:51:29 2009 -0700
+++ b/Plugins/Purple Service/AMPurpleJabberNode.m	Wed Aug 12 00:42:45 2009 -0700
@@ -21,6 +21,12 @@
 @property (readwrite, retain, nonatomic) NSArray *itemsArray;
 @end
 
+static CFArrayCallBacks nonretainingArrayCallbacks = {
+	.version = 0,
+	.copyDescription = (CFArrayCopyDescriptionCallBack)CFCopyDescription,
+	.equal = (CFArrayEqualCallBack)CFEqual,
+};
+
 @implementation AMPurpleJabberNode
 
 static void AMPurpleJabberNode_received_data_cb(PurpleConnection *gc, xmlnode **packet, gpointer this) {
@@ -131,7 +137,7 @@
 																						 name:queryName ? [NSString stringWithUTF8String:queryName] : nil
 																				   connection:self.gc];
 						// propagate delegates
-						newnode.delegates = [[self.delegates mutableCopy] autorelease];
+						newnode.delegates = [NSMakeCollectable(CFArrayCreateMutableCopy(kCFAllocatorDefault, /*capacity*/ 0, (CFArrayRef)self.delegates)) autorelease];
 						[newItems addObject:newnode];
 						// check if we're a conference service
 						if ([[self jid] rangeOfString:@"@"].location == NSNotFound) { // we can't be one when we have an @
@@ -173,7 +179,7 @@
 		self.node = _node;
 		self.name = _name;
 		self.gc = _gc;
-		self.delegates = [NSMutableArray array];
+		self.delegates = [NSMakeCollectable(CFArrayCreateMutable(kCFAllocatorDefault, /*capacity*/ 0, &nonretainingArrayCallbacks)) autorelease];
 		
 		purple_signal_connect(jabber, "jabber-receiving-xmlnode", self,
                               PURPLE_CALLBACK(AMPurpleJabberNode_received_data_cb), self);
@@ -197,7 +203,7 @@
 	copy.name = self.name;
 	copy.gc = self.gc;
 
-	copy.delegates = [NSMutableArray array];
+	copy.delegates = [NSMakeCollectable(CFArrayCreateMutable(kCFAllocatorDefault, /*capacity*/ 0, &nonretainingArrayCallbacks)) autorelease];
 	copy.features = self.features;
 	copy.identities = self.identities;
 	copy.itemsArray = self.itemsArray;




More information about the commits mailing list