Subject: bug#18390: 24.4.50; REGRESSION: `split-window' error

From: Drew Adams <[email-masked]>
Date: Tue, 2 Sep 2014 11:33:25 -0700 (PDT)

The regression was introduced after this build:

In GNU Emacs 24.4.50.1 (i686-pc-mingw32)
 of 2014-06-01 on ODIEONE
Repository revision: 117212 [email-masked]=
orz302h
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --prefix=3D/c/Devel/emacs/snapshot/trunk
 --enable-checking=3Dyes,glyphs 'CFLAGS=3D-O0 -g3'
 LDFLAGS=3D-Lc:/Devel/emacs/lib 'CPPFLAGS=3D-DGC_MCHECK=3D1
 -Ic:/Devel/emacs/include''

In GNU Emacs 24.4.50.1 (i686-pc-mingw32)
 of 2014-05-25 on ODIEONE
Repository revision: 117153 [email-masked]
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --prefix=3D/c/Devel/emacs/snapshot/trunk
 --enable-checking=3Dyes,glyphs 'CFLAGS=3D-O0 -g3'
 LDFLAGS=3D-Lc:/Devel/emacs/lib 'CPPFLAGS=3D-DGC_MCHECK=3D1
 -Ic:/Devel/emacs/include''

and before this build, one week later:

In GNU Emacs 24.4.50.1 (i686-pc-mingw32)
 of 2014-06-01 on ODIEONE
Repository revision: 117212 [email-masked]=
orz302h
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --prefix=3D/c/Devel/emacs/snapshot/trunk
 --enable-checking=3Dyes,glyphs 'CFLAGS=3D-O0 -g3'
 LDFLAGS=3D-Lc:/Devel/emacs/lib 'CPPFLAGS=3D-DGC_MCHECK=3D1
 -Ic:/Devel/emacs/include''

Recipe to repro:

1. emacs -Q

2. Load library hexrgb.el, then library palette.el. Both available from
   Emacs Wiki.
   http://www.emacswiki.org/emacs-en/download/hexrgb.el
   http://www.emacswiki.org/emacs-en/download/palette.el

3. M-x set-variable debug-on-error t RET

4. M-x palette RET RET ; Opens color palette for an arbitrary color.

5. You get this backtrace:

Debugger entered--Lisp error: (error "Window #<window 8 on Palette (Hue x S=
aturation)> too small for splitting 3")
  signal(error ("Window #<window 8 on Palette (Hue x Saturation)> too small=
 for splitting 3"))
  error("Window %s too small for splitting 3" #<window 8 on Palette (Hue x =
Saturation)>)
  byte-code("...
  split-window(#<window 8 on Palette (Hue x Saturation)> 100 t)
  (let* ((pop-up-frames t) (window-min-width 5) (fit-frame-inhibit-fitting-=
flag t) (temp-buffer-setup-hook nil) (temp-buffer-show-functions nil) (widt=
h 100) (height 100) (stringlen (* width height))) (set-buffer (get-buffer-c=
reate "Palette (Hue x Saturation)")) (make-variable-frame-local (quote 1on1=
-change-cursor-on-input-method-flag)) (modify-frame-parameters (make-frame =
(list (quote (menu-bar-lines . 0)) (quote (tool-bar-lines . 0)) (quote (lef=
t-fringe . 0)) (quote (right-fringe . 0)) (quote (fringe . 0)) (quote (heig=
ht . 100)) (quote (width . 115)) (quote (minibuffer)) (quote (vertical-scro=
ll-bars)) (quote (cursor-type . box)) (quote (background-color . "Black")) =
(quote (mouse-color . "Black")) (quote (cursor-color . "Black")) (cons (quo=
te font) palette-font))) (quote ((1on1-change-cursor-on-input-method-flag))=
)) (let* ((old-dir default-directory) (buf (save-current-buffer (set-buffer=
 (get-buffer-create "Palette (Hue x Saturation)")) (prog1 (current-buffer) =
(kill-all-local-variables) (setq default-directory old-dir) (setq buffer-re=
ad-only nil) (setq buffer-file-name nil) (setq buffer-undo-list t) (let (..=
. ...) (erase-buffer) (run-hooks ...))))) (standard-output buf)) (prog1 (pr=
ogn (let* ((cells (make-string stringlen 32)) (hue 0.999999) (sat 1.0) (ind=
ex 0) (col "#000000000000") (hhh 0) (sss 0)) (while (< index stringlen) (se=
tq sss 0) (while (< sss height) (setq hhh 0 hue 1.0) (while ... ... ... ...=
) (setq sat ... sss ...))) (set-buffer "Palette (Hue x Saturation)") (setq =
sss 0 index 0) (while (< sss height) (insert (substring cells index ...) 10=
) (setq sss (1+ sss) index (+ index width))))) (internal-temp-output-buffer=
-show buf))) (select-window (get-buffer-window "Palette (Hue x Saturation)"=
 (quote visible))) (set-window-dedicated-p (selected-window) t) (setq heade=
r-line-format nil window-size-fixed t) (palette-mode) (setq buffer-read-onl=
y t) (split-window (selected-window) width t) (palette-swatch) (palette-swa=
tch t) (split-window (selected-window) 10 t) (palette-brightness-scale) (se=
lect-window (get-buffer-window "Palette (Hue x Saturation)" (quote visible)=
)))
  palette("")
  funcall-interactively(palette "")
  call-interactively(palette record nil)
  command-execute(palette record)
  execute-extended-command(nil "palette")
  funcall-interactively(execute-extended-command nil "palette")
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)

6. I'm sorry to say that I tried to trace this, in detail, from the
   beginning (in `emacs -Q') using `debug-on-entry' for function
   `palette', and the error was not raised.  And yet the error is 100%
   reproducible...  Perhaps the debugger interacts in some way with
   the (window-splitting?) code.

Sorry, I don't have a simpler recipe than this.

In GNU Emacs 24.4.50.1 (i686-pc-mingw32)
 of 2014-08-15 on LEG570
Bzr revision: 117706 [email-masked]
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --enable-checking 'CFLAGS=3D-O0 -g3' CPPFLAGS=3D-DGLYPH_DEBUG=
=3D1'