Re: notmuch-emacs bug report -- infinite looping trying to select next message

Subject: Re: notmuch-emacs bug report -- infinite looping trying to select next message

Date: Thu, 16 Feb 2012 13:39:01 +0100

To: Michael Hudson-Doyle, notmuch@notmuchmail.org

Cc:

From: Rodney Lorrimar


Hi Michael,

On Wed, 15 Feb 2012 10:57:42 +1300, Michael Hudson-Doyle <michael.hudson@canonical.com> wrote:
> Thanks for the reply!
> 
> On Tue, 14 Feb 2012 10:41:20 +0100, Rodney Lorrimar <dev@rodney.id.au> wrote:
> > Hi Michael,
> > 
> > On Tue, 14 Feb 2012 11:01:56 +1300, Michael Hudson-Doyle <michael.hudson@canonical.com> wrote:
> > > The attached gzipped mbox appears to trip up the emacs interface.  The
> > > problem seems to come from the message with id
> > > CAGNsrLCWv6=36q+q+5Hc_SzgdZ2ergeKkapT7T3xXvim=2cK+A@mail.gmail.com.
> > > 
> > > If you load up the thread in emacs, you get a message:
> > > 
> > > mm-extern-cache-contents: Couldn't find access type
> > 
> > If you put (require 'gnus-art) into your .emacs and eval it, does the
> > problem go away?
> 
> No.

Oh well.

I loaded up the thread in notmuch and also got an infinite loop.

> > > Then attempting to advance past the last display message (or pressing A,
> > > or a few other things I expect gets emacs to loop indefinitely.
> > > toggle-debug-on-quit gets me this backtrace:
> > 
> > I believe the actual bug is in gnus but I don't really like the loop on
> > error behaviour of notmuch. I would like to try and fix it but haven't
> > found the time.
> 
> As far as I can tell, gnus isn't involved here.  I may be wrong, of
> course!

After setting a breakpoint in mm-extern-cache-contents I'm inclined to
agree, but I'm not really sure.

The following hack to 0.11 works around the problem. I think the experts
here would be able to come up with something better.

Cheers,

Rodney

diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 82d11c9..48c15d2 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -327,7 +327,8 @@ current buffer, if possible."
     (with-temp-buffer
       (let ((handle (mm-make-handle (current-buffer) (list content-type))))
    (if (and (mm-inlinable-p handle)
-        (mm-inlined-p handle))
+        (mm-inlined-p handle)
+        (cdr (mm-handle-type handle)))
        (let ((content (notmuch-show-get-bodypart-content msg part nth)))
          (insert content)
          (set-buffer display-buffer)

Thread: