<<< Date Index >>>     <<< Thread Index >>>

IMAP reconnect crash



Whenever mutt gets disconnected from my IMAP server, for any reason, reconnecting causes a crash. The message on-screen when mutt crashes is "Sorting mailbox...".

I'm using the latest source from the hg repository, linked against tokyocabinet 1.3.9, ncurses 5.7.20081102, libiconv 1.11, libidn 1.11.

Here's what gets left at the tail end of my debug log:

    8< a0017 OK Status completed.
    8< * STATUS "INBOX.Subscribed.Qmail" (RECENT 0 UIDNEXT 4819
    UIDVALIDITY 1173549363 UNSEEN 0)
    INBOX.Subscribed.Qmail (UIDVALIDITY: 1173549363, UIDNEXT: 4819) 0
    messages, 0 recent, 0 unseen
    Running default STATUS handler
    Found INBOX.Subscribed.Qmail in buffy list (OV: 1173549363 ON:
    4819 U: 0)
    8< a0018 OK Status completed.
    IMAP queue drained
    8> a0019 IDLE
    8< + idling

When I ran it inside GDB, here's the backtrace:

    #0  0x532e5554 in ?? ()
    #1  0x000d07f4 in mutt_sasl_conn_poll (conn=Cannot access memory
    at address 0x532e5554) at mutt_sasl.c:615
    #2  0x000d07f4 in mutt_sasl_conn_poll (conn=0x18c9000) at
    mutt_sasl.c:615
    #3  0x000ca55c in mutt_socket_poll (conn=0x18c9000) at
    mutt_socket.c:168
    #4  0x000dc3ec in imap_check_mailbox (ctx=0x114d5a0,
    index_hint=0xbfffe78c, force=0) at imap.c:1401
    #5  0x00068680 in mx_check_mailbox (ctx=0x114d5a0,
    index_hint=0xbfffe78c, lock=0) at mx.c:1350
    #6  0x00026a2c in mutt_index_menu () at curs_main.c:595
    #7  0x00055bcc in main (argc=1, argv=0xbffff1c0) at main.c:1016

Line 615 there is:

    rc = sasldata->msasl_poll (conn);

The contents of sasldata are:

    $2 = {
      saslconn = 0x115c9c0,
      ssf = 0x115cd50,
      pbufsize = 0x115d120,
      buf = 0x0,
      blen = 796226418,
      bpos = 795635555,
      sockdata = 0x616c2f73,
      msasl_open = 0x68617265,
      msasl_close = 0x2f6c6f63,
      msasl_read = 0x616c652f,
      msasl_write = 0x656e5f55,
      msasl_poll = 0x532e5554
    }

It looks to me like what happened is that when the original connection got disconnected, it didn't get properly removed from the list of connections. But I wonder if we can get by with saying:

    if (sasldata->buf == 0) return -1;

I can repeat this reliably by simply unplugging my ethernet cord.

Does anyone have a better idea what might be going wrong?

~Kyle
--
The average Ph.D thesis is nothing but the transference of bones from one graveyard to another.
                               -- J. Frank Dobie, "A Texan in England"

Attachment: pgp6PCj6rcVhw.pgp
Description: PGP signature