Subject: 27.2; Regression: reproducible hang with face functions

From: Drew Adams <[email-masked]>
Date: Wed, 3 Nov 2021 02:44:22 +0000

emacs -Q

You might want to open buffer *Messages* in another frame, so you can
see its messages (not needed for the bug recipe).

Eval this code:

;;--------------

(defface alt-region '((t :background "gray70" :inherit region))
  "..." :group 'faces)

;; `selected-frame' here could be anything, so this is dicey.
;; But that's not important for the bug.
 (defvar orig-region-atts (face-all-attributes 'region (selected-frame)))

(defun foo (&optional arg)
  (interactive "P")
  (let* ((frame  (selected-frame))
         (alist  (if arg
                     (face-all-attributes 'alt-region frame)
                   orig-region-atts))
         (alist  (cons (cons :font 'unspecified) alist))
         (plist  ()))
    (message "BEFORE LOOP, ALIST: %S" alist)
    (while alist
      (push (caar alist) plist)
      (push (cdar alist) plist)
      (setq alist  (cdr alist)))
    (setq plist  (nreverse plist))
    (message "> LOOP. PLIST: %S" plist)
    (apply #'set-face-attribute 'region frame plist)))

;;--------------

You can do `M-x foo' and `C-u M-x foo' with no problem.  You can even
move the cursor with motion keys in between such `foo' invocations.
No problem.

If you do `C-x SPC', to activate the region before trying `foo' with
and without prefix arg, you can even move the cursor horizontally some.

But if you move the cursor vertically then Emacs hangs (e.g. with
`C-u M-x foo'), apparently in an infloop of some kind.  I have to use
the MS Windows Task Manager to kill Emacs.

Similarly, if you use the mouse to select a region, Emacs hangs.

There's no such bug in Emacs 26.3.

--------------------

In GNU Emacs 27.2 (build 1, x86_64-w64-mingw32)
 of 2021-03-26 built on CIRROCUMULUS
Repository revision: deef5efafb70f4b171265b896505b92b6eef24e6
Repository branch: HEAD
Windowing system distributor 'Microsoft Corp.', version 10.0.19042
System Description: Microsoft Windows 10 Pro (v10.0.2009.19042.1288)

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Configured using:
 'configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static''

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY W32NOTIFY ACL GNUTLS LIBXML2
HARFBUZZ ZLIB TOOLKIT_SCROLL_BARS MODULES THREADS JSON PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: ENU
  locale-coding-system: cp1252

Major mode: Emacs-Lisp

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny format-spec rfc822 mml
easymenu mml-sec password-cache epa derived epg epg-config gnus-util
rmail rmail-loaddefs text-property-search seq byte-opt gv bytecomp
byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils time-date subr-x cl-loaddefs cl-lib dired
dired-loaddefs tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel dos-w32 ls-lisp disp-table term/w32-win w32-win
w32-vars term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote threads w32notify w32 lcms2 multi-tty make-network-process
emacs)

Memory information:
((conses 16 102857 17499)
 (symbols 48 6313 1)
 (strings 32 18104 1550)
 (string-bytes 1 539747)
 (vectors 16 9747)
 (vector-slots 8 140879 14626)
 (floats 8 33 282)
 (intervals 56 20766 4787)
 (buffers 1000 13))