#instantbird log on 12 21 2011

All times are UTC.

00:15:50 <-- ecaron has quit (Quit: Instantbird 1.1)
00:21:31 <-- Tobin has quit (Quit: Everything you do is to hurt me, leave me alone.)
00:31:32 <-- Even1 has quit (Ping timeout)
00:31:48 --> Even has joined #instantbird
00:31:48 * ChanServ sets mode +o Even 
01:00:01 <-- wesj has quit (Input/output error)
01:32:05 <-- Mook_as has quit (Quit: gone)
03:23:59 --> Mook has joined #instantbird
04:15:09 <-- Mook has quit (NickServ (GHOST command used by Mook_))
04:15:48 --> Mook has joined #instantbird
04:50:05 <-- Mook has quit (Ping timeout)
04:51:00 --> Mook has joined #instantbird
04:57:34 <-- EionRobb has quit (Quit: Leaving.)
05:05:04 <-- Mook has quit (Ping timeout)
05:31:21 --> Mook has joined #instantbird
05:34:36 <-- Mook has quit (Ping timeout)
05:36:42 --> Mook has joined #instantbird
05:37:46 <-- Mook has quit (NickServ (GHOST command used by Mook_))
06:16:56 --> BlueMaxima1 has joined #instantbird
06:17:00 <-- BlueMaxima has quit (Ping timeout)
06:59:37 <-- Tonnes has quit (Quit: ChatZilla 0.9.87 [Firefox 8.0/20111104165243])
07:01:20 --> BlueMaxima has joined #instantbird
07:02:36 --> Tonnes has joined #instantbird
07:02:39 <-- BlueMaxima1 has quit (Ping timeout)
08:02:41 <-- BlueMaxima has quit (Ping timeout)
08:04:27 --> BlueMaxima has joined #instantbird
08:25:01 <-- gerard-majax has quit (Ping timeout)
09:20:39 --> mmkmou has joined #instantbird
09:22:56 <-- mmkmou has left #instantbird ()
09:26:18 --> jb has joined #instantbird
09:36:57 --> Mic has joined #instantbird
09:36:57 * ChanServ sets mode +h Mic 
09:38:41 <Mic> aleth: I've updated "Scroll keys" (now "Easy Scrolling"), to work with the sections. You might like that:  https://addons.instantbird.org/en-US/instantbird/addon/290/ 
09:39:47 <Mic> Arrow keys and Home/End work flawlessly now.
09:41:06 --> gerard-majax has joined #instantbird
09:56:58 --> flo has joined #instantbird
09:56:58 * ChanServ sets mode +qo flo flo 
10:06:11 <-- Even has quit (Quit: Instantbird 1.2a1pre)
10:06:21 --> Even has joined #instantbird
10:06:21 * ChanServ sets mode +o Even 
10:33:57 --> mmkmou has joined #instantbird
10:51:13 <-- mmkmou has left #instantbird ()
11:23:54 <-- Even has quit (Quit: Instantbird 1.2a1pre)
11:41:39 <-- jb has quit (Connection reset by peer)
11:41:41 --> jb has joined #instantbird
11:59:06 <-- gerard-majax has quit (Ping timeout)
12:41:08 --> FeuerFliege has joined #instantbird
13:15:15 <instantbot> florian@instantbird.org granted review for attachment 1085 on bug 1199.
13:15:18 <instantbot> Bug https://bugzilla.instantbird.org/show_bug.cgi?id=1199 enh, --, ---, clokep, ASSI, Only notify prplIAccounts of status changes when enabled
13:17:30 --> Tomek has joined #instantbird
13:30:51 --> Even has joined #instantbird
13:30:51 * ChanServ sets mode +o Even 
13:54:13 <-- flo has quit (Ping timeout)
13:54:26 --> flo has joined #instantbird
13:54:26 * ChanServ sets mode +qo flo flo 
14:05:52 <-- Tomek has quit (Quit: Instantbird 1.1)
14:19:23 <-- BlueMaxima has quit (Quit: Instantbird 1.1)
15:04:42 --> Mic1 has joined #instantbird
15:06:26 * Mic1 is now known as bp
15:20:37 <flo> hmm, it seems JS-XMPP leaks memory at shutdown
15:20:41 <flo> or maybe that's socket.jsm
16:08:02 <-- bp has quit (Connection reset by peer)
16:10:29 --> igorko has joined #instantbird
16:36:30 --> myk has joined #instantbird
16:37:50 <-- myk has quit (Quit: Instantbird 1.1)
16:37:56 --> myk has joined #instantbird
16:42:36 <-- myk has quit (Quit: Instantbird 1.1)
16:42:37 --> myk has joined #instantbird
16:43:08 <-- myk has quit (Quit: Instantbird 1.1)
16:43:09 --> myk has joined #instantbird
16:45:48 --> gerard-majax has joined #instantbird
16:53:33 --> wesj has joined #instantbird
17:02:07 <-- Even has quit (Quit: Instantbird 1.2a1pre)
17:09:39 <-- myk has quit (Connection reset by peer)
17:25:25 --> myk has joined #instantbird
17:46:21 --> Mook_as has joined #instantbird
17:47:08 <-- gerard-majax has quit (Ping timeout)
18:33:54 <-- micahg has quit (Ping timeout)
18:39:44 --> BlueMaxima has joined #instantbird
18:47:11 --> gerard-majax has joined #instantbird
18:48:23 --> hunsly has joined #instantbird
18:49:44 --> micahg has joined #instantbird
18:54:02 <-- jb has quit (Ping timeout)
18:55:23 <-- Novarg has quit (Ping timeout)
19:04:50 <instantbot> florian@instantbird.org set the Resolution field on bug 1199 to FIXED.
19:04:53 <instantbot> Bug https://bugzilla.instantbird.org/show_bug.cgi?id=1199 enh, --, 1.2, clokep, RESO FIXED, Only notify prplIAccounts of status changes when enabled
19:05:25 <-- myk has quit (Max SendQ exceeded)
19:05:26 --> myk has joined #instantbird
19:05:26 --> Novarg has joined #instantbird
19:06:09 <Mic> clokep: I uploaded the VZ Net chat extension which I modified to work with js-xmpp: https://addons.instantbird.org/en-US/instantbird/addon/254/ 
19:09:00 <flo> with the changes I've just pushed, I got rid of the JS errors at shutdown, and of a leak (each JS-XMPP account connection leaked the xmpp-session instance and 3 instances of the XML parser)
19:09:10 --> Tomek has joined #instantbird
19:09:20 <flo> I haven't managed to understand yet why all JS-XMPP conversations are leaked :-/
19:09:43 <Mook_as> are there clear steps to reproduce?
19:09:51 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/033dfcf2e107 - Florian Quèze - Fix JS-XMPP to not leak XML parsers.
19:09:52 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/20dd664184cc - Florian Quèze - Correctly disable account manager buttons when going offline.
19:09:53 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/e44b45bd28b1 - Florian Quèze - Avoid infinite recursion if an unread-message-count-changed observer calls markAsRead.
19:09:54 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/59b6d45b646e - Patrick Cloke - Bug 1199 - Only notify prplIAccounts of status changes when enabled, r=fqueze.
19:09:55 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/dccea7af73e6 - Florian Quèze - Disconnect JS-XMPP accounts when they are uninitialized.
19:09:56 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/80b48d1c1554 - Florian Quèze - Avoid shutdown errors when conversations were still opened.
19:10:17 <flo> Mook_as: open a conversation using JS-XMPP (either Google talk or Facebook chat).
19:11:22 <flo> we leak at least 2 nsXPCWrappedJS for each message in that conversation, + some more objects (conversation participants, etc...)
19:11:22 <Mook_as> okay, I guess that means I need a debug build... at least this will be doable on linux
19:11:30 <flo> it's probably the whole conversation object that is leaked though
19:11:39 <flo> (the conversation references messages and participants)
19:12:33 <flo> and the fix I checked in for the XML parser leaks is awful :-(
19:13:36 <flo> I'm almost sure there's a real Mozilla bug somewhere in the parser, but I don't understand this code well enough to be able to file a useful bug. (and if I understood the situation, fixing the bug would probably be the fastest way to understand what I need to describe in the bug)
19:14:36 --> Mnyromyr has joined #instantbird
19:14:53 <Mook_as> wtf @ http://hg.instantbird.org/instantbird/rev/033dfcf2e107#l1.24
19:15:27 <flo> Mook_as: it keeps all sorts of silly references, and the cycle collector doesn't seem to do its job :(
19:15:43 * Mook_as has never trusted the cycle collector
19:15:53 <Mook_as> too much magic; I prefer breaking xpcom cycles manually.
19:16:18 <flo> plus, if I don't call onStopRequest by hand, the nsSAXXMLReader keeps a reference to an nsParser instance (and create a cycle)
19:16:29 <flo> and if I do call it, the next parser crashes...
19:16:50 <Mook_as> haha
19:17:19 <flo> I hate that patch
19:17:31 <flo> and that kind of silly workaround take a while to figure out...
19:20:13 <flo> Mook_as: if you can find time to make a debug build and find the cause of the conversation leak that would be awesome :)
19:20:33 <Mook_as> I can _try_
19:20:51 <Mook_as> that, or fall asleep... hey, I'm taking tomorrow-until-end-of-year off :p
19:21:02 <flo> :)
19:22:07 <flo> I'll go eat diner. I'll probably be back in a few hours :)
19:22:10 <-- flo has quit (Quit: Instantbird 1.2a1pre)
19:23:01 * Mook_as feels bad but can't help but imagine a godzilla-sized flo eating a restaurant
19:26:51 <Mnyromyr> :-D
20:09:44 <-- hunsly has quit (Ping timeout)
20:41:33 <-- igorko has quit (Quit: Instantbird 1.1)
20:43:26 --> flo has joined #instantbird
20:43:26 * ChanServ sets mode +qo flo flo 
20:51:31 <-- FeuerFliege has quit (Ping timeout)
20:56:33 <flo> I'm not sure if this is good or bad news, but the conversation leak also exists with jsTest
20:56:44 <flo> so JS-XMPP is probably not faulty for this one
20:56:55 <flo> and I'll need to search for a possible cause in jsProtoHelper
20:58:02 <flo> and I've just double checked that conversations on libpurple-based protocols don't have this leak
21:04:18 <Mook_as> good news, I think, because that means less code to look at
21:04:49 <Mook_as> out of curiosity: is there unit test coverage of ib in general?
21:05:16 <flo> no
21:06:13 <flo> and we wouldn't have enough machines to run these tests if we had them :(
21:06:56 <flo> I would really like to have a very simple test that checks that a build can start and open a conversation windows before starting the upload
21:07:19 <flo> I would be more confident in our nightly builds if we had at least that! :)
21:11:13 <flo> hmm, I can have libpurple-based conversations that don't leak, so it's safe to assume the problem isn't related to displaying the conversation, right?
21:13:04 <flo> hmm, the jsProtoHelper-based conversations keep a ref to the prplAccount
21:13:21 <flo> and I wouldn't be surprised if the account had a reference to all active conversation it has
21:13:33 <Mook_as> but that means your leak log should also have a prplAccount?
21:13:44 <Mook_as> oh, I guess if that's implemented in JS too...
21:13:59 <flo> hmm, no. jsTest drops the reference it has to its conversations when the account is disconnected
21:14:13 <flo> Mook_as: all of that is in JS
21:14:17 <Mook_as> ugh
21:14:23 <Mook_as> got a heap dump I can skim?
21:14:47 <flo> Mook_as: the log looks like this http://pastebin.instantbird.com/4113
21:15:08 <flo> I'll see if dropping the ref from the conv to the account when the conv is closed helps
21:15:48 <Mook_as> that's the leak log, not the heap dump :)
21:16:12 <Mook_as> (and yeah, it just says "something in JS, pretending to be xpcom")
21:16:17 <flo> yeah, but you can see if there are classes I could suspect
21:16:52 <Mook_as> the only thing useful is nsPrefBranch, and... that's not _very_ useful. just means you are leaking an object with it on there somewhere
21:17:06 <flo> yeah
21:17:11 <Mook_as> (or, I suppose, pref observers leaking...)
21:17:17 <flo> there used to be useful things, but I fixed them ;)
21:17:25 <flo> nsSAXXMLReader, nsParser, etc...
21:17:52 <Mook_as> don't worry; if my songbird experience applies here, you should get new ones in a month :p
21:18:43 <flo> dropping that ref doesn't help
21:19:04 <flo> Mook_as: well, I haven't seriously tried to look at the list generated by Thunderbird with my stuff in it
21:19:13 <flo> too long :-D
21:19:41 <flo> and I think starting by parts of the code that come from Instantbird and clearly have issues is a good idea
21:19:42 <Mook_as> hahaha
21:20:03 <Mook_as> does thunderbird-without-instantbird not leak?
21:22:00 <flo> Mook_as: http://queze.net/goinfre/js-leaks.txt
21:22:36 <flo> Mook_as: huh... I can't tell, but I think it does
21:23:03 <flo> "I can't tell" -> because my thunderbird debug build isn't really "clean" ;)
21:26:42 <flo> hmm, messages have a ref to the conversation, and conversations to the list of messages
21:27:33 <flo> but that should only slow down the garbage collection of these objects, right?
21:28:17 <flo> hmm, or maybe if there are wrappers between them that creates artificial JS roots?
21:32:10 <flo> Mook_as: is there a way in that heap dump to know what are the roots?
21:35:49 --> Mic1 has joined #instantbird
21:56:49 --> mmkmou has joined #instantbird
22:01:44 <Mook_as> sorry, was afk (late lunch)
22:01:54 <Mook_as> and, not that I've figured out
22:03:35 <Mook_as> oh boy, timers may be involved
22:05:56 <-- Mic1 has quit (Quit: Instantbird 1.2a1pre)
22:07:43 <Mook_as> also, http://lxr.instantbird.org/instantbird/source/chat/components/src/imConversations.js#51 is an observer - I don't know the code; does it get removed correctly?
22:08:40 <Mook_as> http://lxr.instantbird.org/instantbird/source/chat/components/src/imConversations.js#92 says no, because .bind() creates a new function and it's hard to unobserve something you don't have a handle on... but perhaps the purpleIConv does something
22:14:49 <flo> Mook_as: that object observes both the contact (observer added at line 64; removed at line 128 + in unInint in a patch I checked-in today) and the prplIConversation instances (observers added at line 92, never removed).
22:15:31 <flo> they aren't removed because a prplIConversation can only be linked to one imConversation, and that link continues for the whole lifetime of the purpleIConversation
22:15:54 <flo> so we have a cycle between imConversation and prplIConversation, but that shouldn't create a JS root, right?
22:17:06 * flo is breaking that cycle to see if that changes the leak
22:17:32 <flo> oooh, it's the bind call that creates the wrapper
22:17:53 <Mook_as> yeah, the bind makes a new function, so you can't get at it to remove it
22:18:06 <Mook_as> I'm also suspicious of http://lxr.instantbird.org/instantbird/source/chat/modules/imContentSink.jsm#193
22:18:36 <flo> I don't need to remove that observer
22:18:49 <flo> the whole observed object goes away at the same time as the observing object
22:18:56 <Mook_as> okay :)
22:19:06 <flo> it's just that bind creates a wrapper, which prevents garbage collection
22:19:07 <Mook_as> err, Services.prefs?
22:19:11 <flo> or at least I think it's the problem
22:19:14 <Mook_as> right, that's for imConversations
22:19:29 <flo> if I just delete this._observers in GenericConversationPrototype.unInit I don't have the leak any more
22:19:31 <Mook_as> and now back to Real Work for me :)
22:20:07 <flo> if I create a JS closure with a regular function instead of using bind, do you think it will be collected?
22:20:14 <-- mmkmou has left #instantbird ()
22:20:58 <Mook_as> I'd add this.observeConv = this.observeConv.bind(this) or something along those lines instead, I think
22:21:13 <Mook_as> (so you actually have a ref you can remove manually)
22:21:35 <flo> I don't want to remove it
22:21:45 <Mook_as> ah, okay
22:21:53 <Mook_as> then... errr, something, magic? :p
22:27:45 <flo> well, it doesn't leak any more with jsTest, that doesn't mean everything will be OK with js-xmpp
22:27:59 <Mook_as> but it's going to be not-worse, right? :)
22:28:14 <flo> and getting rid of the observer cycle wasn't enough, the account cycle I had identified previously also needs to be broken by hand
22:28:39 <flo> sure
22:28:43 <flo> it's also going to be "let's try!"
22:32:29 <flo> XMPP MUCs don't leak any more
22:32:34 <flo> private xmpp conversations still do
22:35:00 <-- Mic has quit (Ping timeout)
22:35:36 <flo> uh well, there's a JS error when closing a private xmpp conversation because of my change to fix the leak I've identified before :-/
22:47:09 <-- DGMurdockIII has quit (Quit: get satisfied! • :: core-networks.de ««« (Gamers.IRC) »»» gamersirc.net ::)
23:01:36 <-- Mnyromyr has quit (Quit: ChatZilla 0.9.86 [SeaMonkey 1.1.19/2010030105])
23:35:19 <flo> Mook_as: I've pushed a fix. Thanks for the help! :)
23:35:29 <flo> and enjoy your time off :)
23:38:39 <Mook_as> you're welcome!
23:38:55 <Mook_as> does that mean there are no known leaks at this point?
23:40:07 <instantbot> Check-in: http://hg.instantbird.org/instantbird/rev/20994ee9bfaa - Florian Quèze - Avoid leaking JS conversations.