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