Re: gconfd process eating CPU
Mark McLoughlin <[email protected]>
| Newsgroups | gmane.comp.gnome.lib.gconf |
|---|---|
| Message-ID | <1105431758.4218.12.camel@blaa> |
On Mon, 2005-01-10 at 18:21 -0600, Brian Cameron wrote: > >>4335/1@1: 1.0220 -> liblinc:linc_connection_read(0x34900, 0x14418c, 0x0, 0x0) > >>4335/1@1: 1.0222 -> liblinc:d_printf(0xff1e5bb0, 0x0, 0xa, 0x0) > >>4335/1@1: 1.0224 <- liblinc:d_printf() = 0xff1e5bb0 > >>4335/1@1: 1.0228 <- liblinc:linc_connection_read() = 0 > > > > -> Here we read the connection and find that it returns zero. That > > means the other side of the connection has closed. Looking at > > recent ORBit code I'd expect linc_connection_state_changed() to > > be called and we'd close our side and remove the source > > This makes sense, although looking at the code for link_connection_io_handler > (both the older code and the current CVS code), I don't see how > link_connection_state_changed could get called in this scenario. Right, linc_connection_read() returns LINC_IO_FATAL_ERROR if read() returns zero. So, the other side isn't closing the connection then - or at least that's not what a zero return from linc_connection_read() means. So, linc_connection_read() is being passed len == 0. Looking at the code, the only way that could really happen is if a previous read returned an error and state_changed (LINC_DISCONNECTED) didn't cause the watch to be removed. Dunno, you'd need a debug log from the time when the connection got into that state. Cheers, Mark.