Subject: bug#35208: closed (Re: bug#35208: 27.0.50; Gnus nndraft error when saving message buffer)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 11 Apr 2019 00:25:02 +0000

Your bug report

#35208: 27.0.50; Gnus nndraft error when saving message buffer

which was filed against the emacs,gnus package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
35208: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=35208
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#35208: 27.0.50; Gnus nndraft error when saving message buffer
From: Katsumi Yamaoka <[email-masked]>
To: Basil L. Contovounesios <[email-masked]>
Cc: Eric Abrahamsen <[email-masked]>, [email-masked]
Date: Thu, 11 Apr 2019 09:24:32 +0900
List-Id: <debbugs-submit.debbugs.gnu.org>

On Wed, 10 Apr 2019 18:24:02 +0100, Basil L. Contovounesios wrote:
> Katsumi Yamaoka <[email-masked]> writes:
>> The message is saved with no error, hmmm.
[...]
> Hmm, that's odd.  I can reproduce the error 100% of the time.

Oh, I could 100% reproduce this issue.  Maybe the cause of
the failure was I did it in the real home directory instead of
the pseudo home.  Probably Gnus loaded something from ~/News .
Sorry.

Me culprit.  The cause is that `nndraft-update-unread-articles'
fails to go to the nndraft:queue group (in order to delete the
group line if the group has no unread article).  nndraft:queue
and its directory are created when Gnus launches, and it is
registered into `gnus-active-hashtb' but not `gnus-newsrc-hashtb'.
So, `gnus-group-goto-group', that I recently changed so as to
use `gnus-newsrc-hashtb' instead of `gnus-active-hashtb', fails
to find the nndraft:queue group.

I've pushed the fix.  Thank you for pointing this out.

Regards,

Subject: 27.0.50; Gnus nndraft error when saving message buffer
From: "Basil L. Contovounesios" <[email-masked]>
To: [email-masked] (The Gnus Bugfixing Girls + Boys)
Date: Tue, 09 Apr 2019 14:46:20 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Trying to save a draft, e.g. as follows:

0. HOME=$(mktemp -d) emacs -Q
1. M-x toggle-debug-on-error RET
2. (setq gnus-select-method '(nnnil)) C-j
3. M-x gnus RET
4. m
5. foo C-x C-s

results in the following error:

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
  nndraft-update-unread-articles()
  run-hooks(after-save-hook)
  basic-save-buffer(t)
  save-buffer(1)
  funcall-interactively(save-buffer 1)
  call-interactively(save-buffer nil nil)
  command-execute(save-buffer)
--8<---------------cut here---------------end--------------->8---

Reevaluating nndraft-update-unread-articles and repeating step (5) gives
the following backtrace:

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
  =(0 nil)
  (if (= 0 (gnus-group-group-unread)) (progn (delete-region (point-at-bol) (progn (forward-line 1) (point)))))
  (if (and gnus-permanently-visible-groups (string-match gnus-permanently-visible-groups group)) nil (gnus-group-goto-group group) (if (= 0 (gnus-group-group-unread)) (progn (delete-region (point-at-bol) (progn (forward-line 1) (point))))))
  (while --dolist-tail-- (setq group (car --dolist-tail--)) (if (and gnus-permanently-visible-groups (string-match gnus-permanently-visible-groups group)) nil (gnus-group-goto-group group) (if (= 0 (gnus-group-group-unread)) (progn (delete-region (point-at-bol) (progn (forward-line 1) (point)))))) (setq --dolist-tail-- (cdr --dolist-tail--)))
  (let ((--dolist-tail-- groups) group) (while --dolist-tail-- (setq group (car --dolist-tail--)) (if (and gnus-permanently-visible-groups (string-match gnus-permanently-visible-groups group)) nil (gnus-group-goto-group group) (if (= 0 (gnus-group-group-unread)) (progn (delete-region (point-at-bol) (progn (forward-line 1) (point)))))) (setq --dolist-tail-- (cdr --dolist-tail--))))
  (save-excursion (let ((--dolist-tail-- groups) group) (while --dolist-tail-- (setq group (car --dolist-tail--)) (if (and gnus-permanently-visible-groups (string-match gnus-permanently-visible-groups group)) nil (gnus-group-goto-group group) (if (= 0 (gnus-group-group-unread)) (progn (delete-region (point-at-bol) (progn ... ...))))) (setq --dolist-tail-- (cdr --dolist-tail--)))))
  (let* ((groups (mapcar #'(lambda (elem) (gnus-group-prefixed-name (car elem) (list ... ""))) (nnmail-get-active))) (gnus-group-marked (copy-sequence groups)) (gnus-get-new-news-hook nil) (inhibit-read-only t)) (gnus-group-get-new-news-this-group nil t) (save-excursion (let ((--dolist-tail-- groups) group) (while --dolist-tail-- (setq group (car --dolist-tail--)) (if (and gnus-permanently-visible-groups (string-match gnus-permanently-visible-groups group)) nil (gnus-group-goto-group group) (if (= 0 (gnus-group-group-unread)) (progn (delete-region ... ...)))) (setq --dolist-tail-- (cdr --dolist-tail--))))))
  (save-current-buffer (set-buffer gnus-group-buffer) (let* ((groups (mapcar #'(lambda (elem) (gnus-group-prefixed-name ... ...)) (nnmail-get-active))) (gnus-group-marked (copy-sequence groups)) (gnus-get-new-news-hook nil) (inhibit-read-only t)) (gnus-group-get-new-news-this-group nil t) (save-excursion (let ((--dolist-tail-- groups) group) (while --dolist-tail-- (setq group (car --dolist-tail--)) (if (and gnus-permanently-visible-groups (string-match gnus-permanently-visible-groups group)) nil (gnus-group-goto-group group) (if (= 0 ...) (progn ...))) (setq --dolist-tail-- (cdr --dolist-tail--)))))))
  nndraft-update-unread-articles()
  run-hooks(after-save-hook)
  basic-save-buffer(t)
  save-buffer(1)
  funcall-interactively(save-buffer 1)
  call-interactively(save-buffer nil nil)
  command-execute(save-buffer)
--8<---------------cut here---------------end--------------->8---

I'm temporarily working around this by
changing (zerop (gnus-group-group-unread))
to (eq 0 (gnus-group-group-unread)),
but a larger problem seems to be at play.

Any tips?  Thanks,

-- 
Basil

Gnus v5.13
In GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2019-04-09 built on thunk
Repository revision: 44b306d3510e54432b76724583ea9405f1c90686
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12003000
System Description: Debian GNU/Linux buster/sid

Configured using:
 'configure 'CC=ccache gcc' 'CFLAGS=-O2 -march=native' --config-cache
 --prefix=/home/blc/.local --with-mailutils --with-x-toolkit=lucid
 --with-modules --with-file-notification=yes --with-x'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS
GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT
LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS
LIBSYSTEMD JSON PDUMPER LCMS2 GMP