adium 3454:ae945e4c9bfc: Hate to be working on this in the zerot...
commits at adium.im
commits at adium.im
Sun Oct 31 01:10:32 UTC 2010
details: http://hg.adium.im/adium/rev/ae945e4c9bfc
revision: 3454:ae945e4c9bfc
author: Evan Schoenberg
date: Sat Oct 30 20:09:29 2010 -0500
Hate to be working on this in the zeroth hour, but a remaining crash was reported against the AIProxyListObject code. I believe I've determined the cause; we need to redisplay the list *after* a reload, not before.
(transplanted from 64fa060cf86bcd135fb69ecaa4c97913f537da28)
Subject: adium 3455:2b3f52cfb168: Just in case, disable the memory optimization in which we removed the proxylistobject for items in collapsed groups. This should be reenabled after adium 1.4 is released, for further testing
details: http://hg.adium.im/adium/rev/2b3f52cfb168
revision: 3455:2b3f52cfb168
author: Evan Schoenberg
date: Sat Oct 30 20:10:03 2010 -0500
Just in case, disable the memory optimization in which we removed the proxylistobject for items in collapsed groups. This should be reenabled after adium 1.4 is released, for further testing
(transplanted from 63c41dfda8f3a9493a7c2544f4183889ec3f5ec0)
diffs (73 lines):
diff -r b1908cf6accb -r 2b3f52cfb168 Frameworks/Adium Framework/Source/AIContactObserverManager.m
--- a/Frameworks/Adium Framework/Source/AIContactObserverManager.m Sat Oct 30 17:51:25 2010 -0500
+++ b/Frameworks/Adium Framework/Source/AIContactObserverManager.m Sat Oct 30 20:10:03 2010 -0500
@@ -270,7 +270,7 @@
//Send out global attribute & status changed notifications (to cover any delayed updates)
if (updatesOccured) {
BOOL shouldSort = NO;
-
+ BOOL postAttributesChangesComplete = NO;
//Inform observers of any changes
if (delayedContactChanges) {
delayedContactChanges = 0;
@@ -290,11 +290,7 @@
shouldSort = YES;
}
- /* Note that we completed 1 or more delayed attribute changes; the precise object isn't known */
- [[NSNotificationCenter defaultCenter] postNotificationName:ListObject_AttributeChangesComplete
- object:nil
- userInfo:[NSDictionary dictionaryWithObject:delayedModifiedAttributeKeys
- forKey:@"Keys"]];
+ postAttributesChangesComplete = YES;
[delayedModifiedAttributeKeys removeAllObjects];
delayedAttributeChanges = 0;
@@ -304,6 +300,19 @@
if (shouldSort) {
[adium.contactController sortContactList];
}
+
+ if (postAttributesChangesComplete) {
+ /* Note that we completed 1 or more delayed attribute changes; the precise object isn't known
+ *
+ * This MUST be done AFTER we sort the contact list, if that was necessary, or we may trigger a redisplay
+ * before the contact list does reloadData, leading to bad things as released objects are messaged via
+ * the contact list delegate.
+ */
+ [[NSNotificationCenter defaultCenter] postNotificationName:ListObject_AttributeChangesComplete
+ object:nil
+ userInfo:[NSDictionary dictionaryWithObject:delayedModifiedAttributeKeys
+ forKey:@"Keys"]];
+ }
}
//If no more updates are left to process, disable the update timer
diff -r b1908cf6accb -r 2b3f52cfb168 Frameworks/Adium Framework/Source/AIListGroup.m
--- a/Frameworks/Adium Framework/Source/AIListGroup.m Sat Oct 30 17:51:25 2010 -0500
+++ b/Frameworks/Adium Framework/Source/AIListGroup.m Sat Oct 30 20:10:03 2010 -0500
@@ -119,7 +119,11 @@
for (AIListObject *obj in oldVisibleObjects) {
/* For each object which was previously visible but now is not, it's cache clearing time. */
- [obj removeProxyObject:[AIProxyListObject existingProxyListObjectForListObject:obj inListObject:self]];
+
+ /* Should be able to remove the proxy object here, but it seemed to cause a crash previously (before fixes
+ * made to the contactObserverManager. Reenable after 1.4.
+ */
+ //[obj removeProxyObject:[AIProxyListObject existingProxyListObjectForListObject:obj inListObject:self]];
[AIUserIcons flushCacheForObject:obj];
}
@@ -158,7 +162,10 @@
modifiedProperties = [NSSet setWithObjects:@"VisibleObjectCount", nil];
if (!shouldBeVisible) {
- [inObject removeProxyObject:[AIProxyListObject existingProxyListObjectForListObject:inObject inListObject:self]];
+ /* Should be able to remove the proxy object here, but it seemed to cause a crash previously (before fixes
+ * made to the contactObserverManager. Reenable after 1.4.
+ */
+ //[inObject removeProxyObject:[AIProxyListObject existingProxyListObjectForListObject:inObject inListObject:self]];
[AIUserIcons flushCacheForObject:inObject];
}
}
More information about the commits
mailing list