Pidgin freezes when XMPP server silently disappears

Bron Gondwana brong at fastmail.fm
Sun Jul 20 09:42:21 EDT 2008


I'm currently fiddling with Djabberd, and restarting the server
quite frequently as I test out new code.

Each time, Pidgin freezes for quite a few seconds (haven't
calculated exactly) - the interface just plain freezes, nothing
works, the buddy list doesn't redraw.

Stracing the process gives this:

read(14, "", 4095)                      = 0
read(15, "", 4095)                      = 0
read(3, 0x8130dd4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1216560678, 428051}, NULL) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=10, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN}, {fd=20, events=POLLIN|POLLPRI}, {fd=21, events=POLLIN|POLLPRI}, {fd=22, events=POLLIN|POLLPRI}, {fd=18, events=POLLIN}, {fd=12, events=POLLIN}, {fd=14, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}, {fd=15, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}], 12, 0) = 2
read(14, "", 4095)                      = 0
read(15, "", 4095)                      = 0
read(3, 0x8130dd4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1216560678, 428336}, NULL) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=10, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN}, {fd=20, events=POLLIN|POLLPRI}, {fd=21, events=POLLIN|POLLPRI}, {fd=22, events=POLLIN|POLLPRI}, {fd=18, events=POLLIN}, {fd=12, events=POLLIN}, {fd=14, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}, {fd=15, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}], 12, 0) = 2
read(14, "", 4095)                      = 0
read(15, "", 4095)                      = 0
read(3, 0x8130dd4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1216560678, 428535}, NULL) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=10, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN}, {fd=20, events=POLLIN|POLLPRI}, {fd=21, events=POLLIN|POLLPRI}, {fd=22, events=POLLIN|POLLPRI}, {fd=18, events=POLLIN}, {fd=12, events=POLLIN}, {fd=14, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}, {fd=15, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}], 12, 0) = 2
read(14, "", 4095)                      = 0
read(15, "", 4095)                      = 0
read(3, 0x8130dd4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1216560678, 428747}, NULL) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=10, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN}, {fd=20, events=POLLIN|POLLPRI}, {fd=21, events=POLLIN|POLLPRI}, {fd=22, events=POLLIN|POLLPRI}, {fd=18, events=POLLIN}, {fd=12, events=POLLIN}, {fd=14, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}, {fd=15, events=POLLIN, revents=POLLIN|POLLERR|POLLHUP}], 12, 0) = 2
read(14, "", 4095)                      = 0
read(15, "", 4095)                      = 0
read(3, 0x8130dd4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1216560678, 428959}, NULL) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=10, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN}, {fd=20, events=POLLIN|POLLPRI}, {fd=21, events=POLLIN|POLLPRI}, {fd=22, evenarily unavailable)

.......

It looks to me like something is failing to check for disconnection
and blindly leaving the POLLIN on an fd (14 and 15 in this case - I
have two different accounts on the same testing server) after
consuming (or failing to consume) an EOF notification on that socket.

I'd post this to the bug tracking system, but ns[12].twocrazyguys.net
don't seem to want to own up to knowing about pidgin.im at the moment,
so I can't get to the website to find out how to report bugs properly.
Hopefully DNS will be fixed in time for this mail to deliver.

Regards,

Bron.




More information about the Devel mailing list