unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#1450: w32_reset_fringes
@ 2008-11-28 12:52 ` martin rudalics
  2008-11-28 13:22   ` martin rudalics
  2008-12-23  8:05   ` bug#1450: marked as done (w32_reset_fringes) Emacs bug Tracking System
  0 siblings, 2 replies; 10+ messages in thread
From: martin rudalics @ 2008-11-28 12:52 UTC (permalink / raw)
  To: emacs-pretest-bug

The following is with Drew Adams `default-frame-alist' from bug#117 but
completely unrelated to the issues discussed there.  Hence .emacs is

(setq default-frame-alist
       '((foreground-color . "Black")
	(background-color . "LightBlue")
	(font . "-*-Lucida Console-normal-r-*-*-14-112-96-96-c-*-iso8859-1")
	(mouse-color . "Red")
	(cursor-color . "Red")
	(cursor-type . bar)
	(menu-bar-lines . 1)
	(top . 0)
	(left . 0)
	(width . 80)
	(height . 35)
	(minibuffer)
	(user-position . t)
	(vertical-scroll-bars . right)
	(icon-type)
	(left-fringe . 0)
	(right-fringe . 0)
	(fringe . 0)
	(menu-bar-lines . 1)
	(tool-bar-lines . 0)))

which gets you two frames - a main frame and a minibuffer frame.  In the
main frame type C-x C-f and then kill (with the window manager) the
minibuffer frame.

In GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600)
  of 2008-11-27 on MACHNO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4)'

this gets me

Current directory is c:/Programme/Emacs-trunk/src/
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-mingw32"...
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
DISPLAY =
TERM = emacs
Breakpoint 1 at 0x1151c6a: file w32fns.c, line 7279.
Breakpoint 2 at 0x109c79f: file sysdep.c, line 1135.
(gdb) run
btStarting program: c:/Programme/Emacs-trunk/bin/emacs.exe
[New thread 476.0x71c]
[New thread 476.0x1f4]

Breakpoint 1, w32_abort () at w32fns.c:7279
(gdb) bt
#0  w32_abort () at w32fns.c:7279
#1  0x010b5f36 in w32_reset_fringes () at fringe.c:1712
#2  0x01161def in x_delete_terminal (terminal=0x0) at w32term.c:6161
#3  0x010ddea9 in Fdelete_terminal (terminal=48912132, force=44013617) at terminal.c:334
#4  0x010efbdd in Fdelete_frame (frame=45964804, force=44013617) at frame.c:1515
#5  0x0100be38 in Ffuncall (nargs=3, args=0x12be1f0) at eval.c:3047
#6  0x01112783 in Fbyte_code (bytestr=45964800, vector=8579712, maxdepth=2) at bytecode.c:678
#7  0x0100b732 in funcall_lambda (fun=18827052, nargs=1, arg_vector=0x82ec24) at eval.c:3231
#8  0x0100bc27 in Ffuncall (nargs=2, args=0x11f472c) at eval.c:3101
#9  0x01110e2f in Fcall_interactively (function=44325801, record_flag=44013569, keys=48668580) at callint.c:857
#10 0x0100be21 in Ffuncall (nargs=4, args=0x12bee58) at eval.c:3050
#11 0x0100bff9 in call3 (fn=0, arg1=0, arg2=0, arg3=0) at eval.c:2870
#12 0x01056cc9 in Fcommand_execute (cmd=44325801, record_flag=44013569, keys=0, special=44013617) at keyboard.c:10333
#13 0x0105a5e2 in read_char (commandflag=1, nmaps=2, maps=0x82f090, prev_event=44013569, used_mouse_menu=0x82f0d8, end_time=0x0) at keyboard.c:3087
#14 0x0105c47d in read_key_sequence (keybuf=0x82f220, bufsize=30, prompt=44013569, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9344
#15 0x0105e342 in command_loop_1 () at keyboard.c:1621
#16 0x01009fae in internal_condition_case (bfun=0x105e190 <command_loop_1>, handlers=44077321, hfun=0x105773c <cmd_error>) at eval.c:1511
#17 0x01051cca in command_loop_2 () at keyboard.c:1338
#18 0x01009ee3 in internal_catch (tag=0, func=0x1051ca7 <command_loop_2>, arg=44013569) at eval.c:1247
#19 0x01051a83 in command_loop () at keyboard.c:1303
#20 0x01051b70 in recursive_edit_1 () at keyboard.c:942
#21 0x010fa4f9 in read_minibuf (map=44002797, initial=50364131, prompt=44152324, backup_n=33, expflag=0, histvar=0, histpos=0, defalt=44056819, allow_props=0, inherit_input_method=0) at minibuf.c:735
#22 0x010fb181 in Fcompleting_read (prompt=0, collection=0, predicate=0, require_match=44229137, initial_input=44093873, hist=44093873, def=44056819, inherit_input_method=44013569) at minibuf.c:1818
#23 0x0100bd45 in Ffuncall (nargs=8, args=0x12be6f8) at eval.c:3075
#24 0x01112783 in Fbyte_code (bytestr=45964800, vector=8582688, maxdepth=7) at bytecode.c:678
#25 0x0100b732 in funcall_lambda (fun=18560372, nargs=4, arg_vector=0x82f784) at eval.c:3231
#26 0x0100bc27 in Ffuncall (nargs=5, args=0x11b3574) at eval.c:3101
#27 0x01112783 in Fbyte_code (bytestr=45964800, vector=8583040, maxdepth=4) at bytecode.c:678
#28 0x0100b732 in funcall_lambda (fun=18474988, nargs=2, arg_vector=0x82f8d4) at eval.c:3231
#29 0x0100bc27 in Ffuncall (nargs=3, args=0x119e7ec) at eval.c:3101
#30 0x01112783 in Fbyte_code (bytestr=45964800, vector=8583376, maxdepth=2) at bytecode.c:678
#31 0x0100b356 in Feval (form=19656352) at eval.c:2381
#32 0x011105f8 in Fcall_interactively (function=44404073, record_flag=44013569, keys=44047108) at callint.c:361
#33 0x0100be21 in Ffuncall (nargs=4, args=0x12bee58) at eval.c:3050
#34 0x0100bff9 in call3 (fn=0, arg1=0, arg2=0, arg3=0) at eval.c:2870
#35 0x01056cc9 in Fcommand_execute (cmd=44404073, record_flag=44013569, keys=0, special=44013569) at keyboard.c:10333
#36 0x0105e4f5 in command_loop_1 () at keyboard.c:1880
#37 0x01009fae in internal_condition_case (bfun=0x105e190 <command_loop_1>, handlers=44077321, hfun=0x105773c <cmd_error>) at eval.c:1511
#38 0x01051cca in command_loop_2 () at keyboard.c:1338
#39 0x01009ee3 in internal_catch (tag=0, func=0x1051ca7 <command_loop_2>, arg=44013569) at eval.c:1247
#40 0x01051ad7 in command_loop () at keyboard.c:1317
#41 0x01051b70 in recursive_edit_1 () at keyboard.c:942
#42 0x01051c91 in Frecursive_edit () at keyboard.c:1004
#43 0x01002e46 in main (argc=1, argv=0xa327b8) at emacs.c:1777

Lisp Backtrace:
"delete-frame" (0x82ea84)
"handle-delete-frame" (0x82ec24)
"call-interactively" (0x82ee24)
"completing-read" (0x82f624)
"read-file-name" (0x82f784)
"find-file-read-args" (0x82f8d4)
"byte-code" (0x82f990)
"call-interactively" (0x82fc04)
(gdb)







^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-28 12:52 ` bug#1450: w32_reset_fringes martin rudalics
@ 2008-11-28 13:22   ` martin rudalics
  2008-11-28 17:27     ` martin rudalics
  2008-12-23  8:05   ` bug#1450: marked as done (w32_reset_fringes) Emacs bug Tracking System
  1 sibling, 1 reply; 10+ messages in thread
From: martin rudalics @ 2008-11-28 13:22 UTC (permalink / raw)
  To: 1450

The first report was too complicated.  It's sufficient to put the
following line into your .emacs

(setq default-frame-alist '((minibuffer)))

and kill the minibuffer window.  The bug seems due to Richard's change
from 2008-02-08 ...

***************
*** 1393,1404 ****
   	      && EQ (frame,
   		     WINDOW_FRAME (XWINDOW
   				   (FRAME_MINIBUF_WINDOW (XFRAME (this))))))
! 	    error ("Attempt to delete a surrogate minibuffer frame");
   	}
       }

!   /* Run `delete-frame-functions' unless frame is a tooltip.  */
!   if (!NILP (Vrun_hooks)
         && NILP (Fframe_parameter (frame, intern ("tooltip"))))
       {
         Lisp_Object args[2];
--- 1395,1415 ----
   	      && EQ (frame,
   		     WINDOW_FRAME (XWINDOW
   				   (FRAME_MINIBUF_WINDOW (XFRAME (this))))))
! 	    {
! 	      /* If we MUST delete this frame, delete the other first.  */
! 	      if (!NILP (force))
! 		Fdelete_frame (this, force);
! 	      else
! 		error ("Attempt to delete a surrogate minibuffer frame");
! 	    }
   	}
       }

... but maybe other changes are involved too.

martin






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-28 13:22   ` martin rudalics
@ 2008-11-28 17:27     ` martin rudalics
  2008-11-28 22:04       ` Stephen Berman
  0 siblings, 1 reply; 10+ messages in thread
From: martin rudalics @ 2008-11-28 17:27 UTC (permalink / raw)
  To: 1450

The most simple recipe I found so far: Type

(delete-frame nil t)

and C-x C-e crashes Emacs.

So reverting Richard's change I mentioned in the previous post won't
help anyway.

martin







^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-28 17:27     ` martin rudalics
@ 2008-11-28 22:04       ` Stephen Berman
  2008-11-29 11:43         ` martin rudalics
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-11-28 22:04 UTC (permalink / raw)
  To: martin rudalics; +Cc: 1450

On Fri, 28 Nov 2008 18:27:02 +0100 martin rudalics <rudalics@gmx.at> wrote:

> The most simple recipe I found so far: Type
>
> (delete-frame nil t)
>
> and C-x C-e crashes Emacs.
>
> So reverting Richard's change I mentioned in the previous post won't
> help anyway.
>
> martin

A further datapoint: both the above as well as (setq default-frame-alist
'((minibuffer))) also induce a crash in GNU Emacs 23.0.60.16
(i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2008-11-20 on escher

Steve Berman






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-28 22:04       ` Stephen Berman
@ 2008-11-29 11:43         ` martin rudalics
  2008-11-29 20:13           ` Stephen Berman
  0 siblings, 1 reply; 10+ messages in thread
From: martin rudalics @ 2008-11-29 11:43 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 1450

[-- Attachment #1: Type: text/plain, Size: 301 bytes --]

 > A further datapoint: both the above as well as (setq default-frame-alist
 > '((minibuffer))) also induce a crash in GNU Emacs 23.0.60.16
 > (i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2008-11-20 on escher

I attached a fairly secure and minimally invasive patch.
Could you try it?

Thanks, martin.

[-- Attachment #2: terminal-frame.diff --]
[-- Type: text/plain, Size: 5274 bytes --]

*** frame.h.~1.145.~	2008-11-14 07:21:31.062500000 +0100
--- frame.h	2008-11-29 12:27:15.156250000 +0100
***************
*** 1115,1120 ****
--- 1115,1121 ----
  					   Lisp_Object component,
  					   Lisp_Object subclass);
  
+ extern Lisp_Object delete_frame P_ ((Lisp_Object, Lisp_Object));
  
  #endif /* HAVE_WINDOW_SYSTEM */
  
*** frame.c.~1.399.~	2008-11-29 12:04:07.515625000 +0100
--- frame.c	2008-11-29 12:26:53.468750000 +0100
***************
*** 1322,1341 ****
  
  extern Lisp_Object Qrun_hook_with_args;
  
! DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
!        doc: /* Delete FRAME, permanently eliminating it from use.
! If omitted, FRAME defaults to the selected frame.
! A frame may not be deleted if its minibuffer is used by other frames.
! Normally, you may not delete a frame if all other frames are invisible,
! but if the second optional argument FORCE is non-nil, you may do so.
! 
! This function runs `delete-frame-functions' before actually deleting the
! frame, unless the frame is a tooltip.
! The functions are run with one arg, the frame to be deleted.
! But FORCE inhibits this too.  */)
! /* FORCE is non-nil when handling a disconnected terminal.  */
!      (frame, force)
!      Lisp_Object frame, force;
  {
    struct frame *f;
    struct frame *sf = SELECTED_FRAME ();
--- 1322,1330 ----
  
  extern Lisp_Object Qrun_hook_with_args;
  
! Lisp_Object
! delete_frame (frame, force)
!      register Lisp_Object frame, force;
  {
    struct frame *f;
    struct frame *sf = SELECTED_FRAME ();
***************
*** 1360,1371 ****
    if (NILP (force) && !other_visible_frames (f))
      error ("Attempt to delete the sole visible or iconified frame");
  
- #if 0
    /* This is a nice idea, but x_connection_closed needs to be able
       to delete the last frame, if it is gone.  */
!   if (NILP (XCDR (Vframe_list)))
      error ("Attempt to delete the only frame");
- #endif
  
    /* Does this frame have a minibuffer, and is it the surrogate
       minibuffer for any other frame?  */
--- 1349,1358 ----
    if (NILP (force) && !other_visible_frames (f))
      error ("Attempt to delete the sole visible or iconified frame");
  
    /* This is a nice idea, but x_connection_closed needs to be able
       to delete the last frame, if it is gone.  */
!   if (NILP (XCDR (Vframe_list)) && !EQ (force, Qnoelisp))
      error ("Attempt to delete the only frame");
  
    /* Does this frame have a minibuffer, and is it the surrogate
       minibuffer for any other frame?  */
***************
*** 1386,1392 ****
  				   (FRAME_MINIBUF_WINDOW (XFRAME (this))))))
  	    {
  	      /* If we MUST delete this frame, delete the other first.  */
! 	      if (!NILP (force))
  		Fdelete_frame (this, force);
  	      else
  		error ("Attempt to delete a surrogate minibuffer frame");
--- 1373,1379 ----
  				   (FRAME_MINIBUF_WINDOW (XFRAME (this))))))
  	    {
  	      /* If we MUST delete this frame, delete the other first.  */
! 	      if (EQ (force, Qnoelisp))
  		Fdelete_frame (this, force);
  	      else
  		error ("Attempt to delete a surrogate minibuffer frame");
***************
*** 1634,1639 ****
--- 1621,1645 ----
  
    return Qnil;
  }
+ 
+ DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
+        doc: /* Delete FRAME, permanently eliminating it from use.
+ If omitted, FRAME defaults to the selected frame.
+ A frame may not be deleted if its minibuffer is used by other frames.
+ Normally, you may not delete a frame if all other frames are invisible,
+ but if the second optional argument FORCE is non-nil, you may do so.
+ 
+ This function runs `delete-frame-functions' before actually deleting the
+ frame, unless the frame is a tooltip.
+ The functions are run with one arg, the frame to be deleted.
+ But FORCE inhibits this too.  */)
+ /* FORCE is non-nil when handling a disconnected terminal.  */
+      (frame, force)
+      Lisp_Object frame, force;
+ {
+   return delete_frame (frame, !NILP (force) ? Qt : Qnil);
+ }
+ 
  \f
  /* Return mouse position in character cell units.  */
  
*** terminal.c.~1.13.~	2008-11-29 12:04:07.843750000 +0100
--- terminal.c	2008-11-29 12:23:14.406250000 +0100
***************
*** 256,262 ****
    struct terminal **tp;
    Lisp_Object tail, frame;
  
!   /* Protect against recursive calls.  Fdelete_frame calls the
       delete_terminal_hook when we delete our last frame.  */
    if (!terminal->name)
      return;
--- 256,262 ----
    struct terminal **tp;
    Lisp_Object tail, frame;
  
!   /* Protect against recursive calls.  delete_frame calls the
       delete_terminal_hook when we delete our last frame.  */
    if (!terminal->name)
      return;
***************
*** 270,276 ****
        if (FRAME_LIVE_P (f) && f->terminal == terminal)
          {
  	  /* Maybe this should pass Qnoelisp rather than Qt?  */
!           Fdelete_frame (frame, Qt);
          }
      }
  
--- 270,276 ----
        if (FRAME_LIVE_P (f) && f->terminal == terminal)
          {
  	  /* Maybe this should pass Qnoelisp rather than Qt?  */
!           delete_frame (frame, Qnoelisp);
          }
      }

^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-29 11:43         ` martin rudalics
@ 2008-11-29 20:13           ` Stephen Berman
  2008-11-30  9:19             ` martin rudalics
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-11-29 20:13 UTC (permalink / raw)
  To: martin rudalics; +Cc: 1450

On Sat, 29 Nov 2008 12:43:21 +0100 martin rudalics <rudalics@gmx.at> wrote:

>> A further datapoint: both the above as well as (setq default-frame-alist
>> '((minibuffer))) also induce a crash in GNU Emacs 23.0.60.16
>> (i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2008-11-20 on escher
>
> I attached a fairly secure and minimally invasive patch.
> Could you try it?

I tried your patch after updating from the current CVS HEAD.  Now
starting with emacs -q --eval "(setq default-frame-alist
'((minibuffer)))" and trying to delete the minibuffer frame via the
window manager does not crash Emacs, but instead results in no deleted
frame and the error message "Attempt to delete a surrogate minibuffer
frame" (from handle-delete-frame).  Likewise, C-x 5 0 from the
minibuffer frame does not delete it, again showing the error message
(now from call-interactively).  With a non-minibuffer frame deletion via
either the window manager or C-x 5 0 succeeds; then as soon as I click
in the minibuffer frame, a new regular frame is created.

As for starting with emacs -q and the evalling (delete-frame nil t),
this also does not make Emacs crash, but raises the error "Attempt to
delete the only frame".  However, I apparently was mistaken in my post
cited above: I thought evalling (delete-frame nil t) produced a core
dump, like the attempt to delete the minibuffer frame did, but I cannot
reproduce that with the unpatched Emacs, so I must have been confused
about the source of the core file (which I since deleted).  Instead,
evalling (delete-frame nil t) in the unpatched Emacs simply kills Emacs,
verified under gdb ("Program exited normally.").  Sorry for misreporting
this yesterday.

Steve Berman






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-29 20:13           ` Stephen Berman
@ 2008-11-30  9:19             ` martin rudalics
  2008-12-02 14:14               ` Stephen Berman
  0 siblings, 1 reply; 10+ messages in thread
From: martin rudalics @ 2008-11-30  9:19 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 1450

Thanks for testing this.

 > I tried your patch after updating from the current CVS HEAD.  Now
 > starting with emacs -q --eval "(setq default-frame-alist
 > '((minibuffer)))" and trying to delete the minibuffer frame via the
 > window manager does not crash Emacs, but instead results in no deleted
 > frame and the error message "Attempt to delete a surrogate minibuffer
 > frame" (from handle-delete-frame).  Likewise, C-x 5 0 from the
 > minibuffer frame does not delete it, again showing the error message
 > (now from call-interactively).  With a non-minibuffer frame deletion via
 > either the window manager or C-x 5 0 succeeds; then as soon as I click
 > in the minibuffer frame, a new regular frame is created.

I think that's the intended behavior.  At least it was until Emacs 22.
And delete_frame depends on doing so as explained by this comment

	  /* We know that there must be some frame with a minibuffer out
	     there.  If this were not true, all of the frames present
	     would have to be minibufferless, which implies that at some
	     point their minibuffer frames must have been deleted, but
	     that is prohibited at the top; you can't delete surrogate
	     minibuffer frames.  */

 > As for starting with emacs -q and the evalling (delete-frame nil t),
 > this also does not make Emacs crash, but raises the error "Attempt to
 > delete the only frame".

This is new behavior, obviously (it was there in the code, but commented
out).

 > However, I apparently was mistaken in my post
 > cited above: I thought evalling (delete-frame nil t) produced a core
 > dump, like the attempt to delete the minibuffer frame did,

Could you (or someone else on GNU/Linux) post a backtrace for the
minibuffer deletion case?

 > but I cannot
 > reproduce that with the unpatched Emacs, so I must have been confused
 > about the source of the core file (which I since deleted).  Instead,
 > evalling (delete-frame nil t) in the unpatched Emacs simply kills Emacs,
 > verified under gdb ("Program exited normally.").  Sorry for misreporting
 > this yesterday.

That's what Emacs 22 did in that case - exit normally.  But Emacs 22 did
_not_ offer to save any unsaved buffers, so you might have lost some
work.  Does it offer to save buffers on your Emacs 23?

martin







^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-11-30  9:19             ` martin rudalics
@ 2008-12-02 14:14               ` Stephen Berman
  2008-12-02 15:54                 ` martin rudalics
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-12-02 14:14 UTC (permalink / raw)
  To: martin rudalics; +Cc: 1450

Sorry for the delayed response.

On Sun, 30 Nov 2008 10:19:33 +0100 martin rudalics <rudalics@gmx.at> wrote:

> Thanks for testing this.
>
>> I tried your patch after updating from the current CVS HEAD.  Now
>> starting with emacs -q --eval "(setq default-frame-alist
>> '((minibuffer)))" and trying to delete the minibuffer frame via the
>> window manager does not crash Emacs, but instead results in no deleted
>> frame and the error message "Attempt to delete a surrogate minibuffer
>> frame" (from handle-delete-frame).  Likewise, C-x 5 0 from the
>> minibuffer frame does not delete it, again showing the error message
>> (now from call-interactively).  With a non-minibuffer frame deletion via
>> either the window manager or C-x 5 0 succeeds; then as soon as I click
>> in the minibuffer frame, a new regular frame is created.
>
> I think that's the intended behavior.  At least it was until Emacs 22.
> And delete_frame depends on doing so as explained by this comment
>
> 	  /* We know that there must be some frame with a minibuffer out
> 	     there.  If this were not true, all of the frames present
> 	     would have to be minibufferless, which implies that at some
> 	     point their minibuffer frames must have been deleted, but
> 	     that is prohibited at the top; you can't delete surrogate
> 	     minibuffer frames.  */
>
>> As for starting with emacs -q and the evalling (delete-frame nil t),
>> this also does not make Emacs crash, but raises the error "Attempt to
>> delete the only frame".
>
> This is new behavior, obviously (it was there in the code, but commented
> out).
>
>> However, I apparently was mistaken in my post
>> cited above: I thought evalling (delete-frame nil t) produced a core
>> dump, like the attempt to delete the minibuffer frame did,
>
> Could you (or someone else on GNU/Linux) post a backtrace for the
> minibuffer deletion case?

Appended below.

>> but I cannot
>> reproduce that with the unpatched Emacs, so I must have been confused
>> about the source of the core file (which I since deleted).  Instead,
>> evalling (delete-frame nil t) in the unpatched Emacs simply kills Emacs,
>> verified under gdb ("Program exited normally.").  Sorry for misreporting
>> this yesterday.
>
> That's what Emacs 22 did in that case - exit normally.  But Emacs 22 did
> _not_ offer to save any unsaved buffers, so you might have lost some
> work.  Does it offer to save buffers on your Emacs 23?

No it does not.  So your fix is certainly needed.

Steve Berman


(gdb) r -Q --eval "(setq default-frame-alist '((minibuffer)))"
Starting program: /Users/steve/lib/emacs-cvs-gtk/src/emacs-23.0.60.17 -Q --eval "(setq default-frame-alist '((minibuffer)))"
[Thread debugging using libthread_db enabled]
[New Thread 0xb70dc6c0 (LWP 13023)]
[Switching to Thread 0xb70dc6c0 (LWP 13023)]

Breakpoint 1, abort () at /home/steve/cvsroot/emacs/src/emacs.c:428
428	  kill (getpid (), SIGABRT);
(gdb) bt full
#0  abort () at /home/steve/cvsroot/emacs/src/emacs.c:428
No locals.
#1  0x08089931 in redisplay_internal (preserve_echo_area=<value optimized out>)
    at /home/steve/cvsroot/emacs/src/xdisp.c:11393
	w = (struct window *) 0x0
	pause = 0
	must_finish = 0
	number_of_visible_frames = 0
	polling_stopped_here = 0
	old_frame = 141412100
	consider_all_windows_p = 0
#2  0x0812fc6e in read_char (commandflag=1, nmaps=2, maps=0xbf852ac0, 
    prev_event=137943241, used_mouse_menu=0xbf852b74, end_time=0x0)
    at /home/steve/cvsroot/emacs/src/keyboard.c:2649
	c = <value optimized out>
	local_getcjmp = {{
    __jmpbuf = {2, 143631964, 1, -1081791880, -1774884314, -1180720311}, 
    __mask_was_saved = 0, 
    __saved_mask = {
      __val = {0, 0, 40, 3213175168, 1, 0, 4294967295, 3213175228, 138076240, 
        3213175432, 135828553, 137972617, 8, 138076244, 1228226696, 136140190, 
        0, 1, 1, 135545443, 138158953, 1, 3213175000, 1, 143548420, 137969100, 
        3213175000, 8192, 0, 0, 0, 0}
    }
  }}
	save_jump = {{
    __jmpbuf = {0, 0, 0, 0, 0, 0}, 
    __mask_was_saved = 0, 
    __saved_mask = {
      __val = {0 <repeats 32 times>}
    }
  }}
	key_already_recorded = 0
	tem = 138232705
	save = <value optimized out>
	previous_echo_area_message = 137943241
	also_record = 137943241
	reread = 0
	polling_stopped_here = <value optimized out>
	orig_kboard = (struct kboard *) 0x872cb00
#3  0x08131fd1 in read_key_sequence (keybuf=0xbf852c24, bufsize=30, 
    prompt=137943241, dont_downcase_last=0, can_return_switch_frame=1, 
    fix_current_buffer=1) at /home/steve/cvsroot/emacs/src/keyboard.c:9344
	interrupted_kboard = (KBOARD *) 0x872cb00
	key = 0
	used_mouse_menu = 0
	echo_local_start = 0
	last_real_key_start = 0
	keys_local_start = 0
	local_first_binding = 1
	from_string = 137943241
	count = 2
	t = 0
	echo_start = 0
	keys_start = 0
	nmaps = 2
	nmaps_allocated = 2
	defs = (Lisp_Object * volatile) 0xbf852aa0
	submaps = (Lisp_Object * volatile) 0xbf852ac0
	orig_local_map = 137943241
	orig_keymap = 137943241
	localized_local_map = 0
	first_binding = 1
	first_unbound = 31
	mock_input = 0
	fkey = {
  parent = 138343165, 
  map = 138343165, 
  start = 0, 
  end = 0
}
	keytran = {
  parent = 137936765, 
  map = 137936765, 
  start = 0, 
  end = 0
}
	indec = {
  parent = 138343181, 
  map = 138343181, 
  start = 0, 
  end = 0
}
	shift_translated = 0
	delayed_switch_frame = 137943241
	original_uppercase = 2
	original_uppercase_position = -1
	starting_buffer = (struct buffer *) 0x83ae050
	fake_prefixed_keys = 137943241
#4  0x081340f4 in command_loop_1 ()
    at /home/steve/cvsroot/emacs/src/keyboard.c:1621
	cmd = <value optimized out>
	lose = <value optimized out>
	nonundocount = 0
	keybuf = {140896125, 1, -1219133440, 0, 0, 0, -1208666280, 
  -1472036457, 1011, 88216588, 55, -1220440836, -1220445908, 0, 0, 0, 1, 1010, 
  -1223340480, 0, -1081791352, -1081791504, 0, 0, 137943241, 138407017, 0, 
  138468728, 138468712, -1081791320}
	i = <value optimized out>
	prev_modiff = 4
	prev_buffer = (struct buffer *) 0x8393dc8
	already_adjusted = 0
#5  0x0818ed60 in internal_condition_case (bfun=0x8133f10 <command_loop_1>, 
    handlers=137986481, hfun=0x812e7a0 <cmd_error>)
    at /home/steve/cvsroot/emacs/src/eval.c:1511
	val = <value optimized out>
	c = {
  tag = 137943241, 
  val = 137943241, 
  next = 0xbf852dd0, 
  gcpro = 0x0, 
  jmp = {{
      __jmpbuf = {0, 138468728, 138468712, -1081791080, -1774417370, 
        -1379948215}, 
      __mask_was_saved = 0, 
      __saved_mask = {
        __val = {3213176208, 3086313080, 134543677, 141164546, 0, 0, 
          3077189516, 3086311412, 3213175804, 3071626684, 3213175856, 
          3086236055, 3075821888, 141190592, 141190592, 3075817460, 
          3075833856, 3213176432, 3213176140, 3213176432, 3213176280, 
          135516324, 2, 3213176292, 3074542620, 3075833856, 0, 4294967295, 
          3086311412, 3086313080, 134523392, 3213176224}
      }
    }}, 
  backlist = 0x0, 
  handlerlist = 0x0, 
  lisp_eval_depth = 0, 
  pdlcount = 2, 
  poll_suppress_count = 1, 
  interrupt_input_blocked = 0, 
  byte_stack = 0x0
}
	h = {
  handler = 137986481, 
  var = 137943241, 
  chosen_clause = 1, 
  tag = 0xbf852cbc, 
  next = 0x0
}
#6  0x0812dcf5 in command_loop_2 ()
    at /home/steve/cvsroot/emacs/src/keyboard.c:1338
	val = 0
#7  0x0818ee3a in internal_catch (tag=137982457, 
    func=0x812dcd0 <command_loop_2>, arg=137943241)
    at /home/steve/cvsroot/emacs/src/eval.c:1247
	c = {
  tag = 137982457, 
  val = 137943241, 
  next = 0x0, 
  gcpro = 0x0, 
  jmp = {{
      __jmpbuf = {0, 138468728, 138468712, -1081790824, -1774294490, 
        -1380339383}, 
      __mask_was_saved = 0, 
      __saved_mask = {
        __val = {0, 0, 0, 0, 0, 0, 3074961710, 0, 0, 0, 0, 0, 0, 0, 
          3075822032, 192, 0, 3075821944, 177, 22, 138182968, 138180274, 
          137969096, 3213176456, 135791115, 138182969, 138180274, 137943241, 
          137969096, 137943265, 138180272, 0}
      }
    }}, 
  backlist = 0x0, 
  handlerlist = 0x0, 
  lisp_eval_depth = 0, 
  pdlcount = 2, 
  poll_suppress_count = 1, 
  interrupt_input_blocked = 0, 
  byte_stack = 0x0
}
#8  0x0812e5ff in command_loop ()
    at /home/steve/cvsroot/emacs/src/keyboard.c:1317
No locals.
#9  0x0812e97b in recursive_edit_1 ()
    at /home/steve/cvsroot/emacs/src/keyboard.c:942
	val = <value optimized out>
#10 0x0812eac4 in Frecursive_edit ()
    at /home/steve/cvsroot/emacs/src/keyboard.c:1004
	buffer = 137943241
#11 0x081231b7 in main (argc=4, argv=0xbf8532a4)
    at /home/steve/cvsroot/emacs/src/emacs.c:1777
	dummy = -1081789960
	stack_bottom_variable = 8 '\b'
	do_initial_setlocale = 1
	skip_args = 0
	rlim = {
  rlim_cur = 8388608, 
  rlim_max = 18446744073709551615
}
	no_loadup = 0
	junk = 0x0
	dname_arg = 0x0
(gdb) 






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: w32_reset_fringes
  2008-12-02 14:14               ` Stephen Berman
@ 2008-12-02 15:54                 ` martin rudalics
  0 siblings, 0 replies; 10+ messages in thread
From: martin rudalics @ 2008-12-02 15:54 UTC (permalink / raw)
  To: Stephen Berman; +Cc: 1450

 >> That's what Emacs 22 did in that case - exit normally.  But Emacs 22 did
 >> _not_ offer to save any unsaved buffers, so you might have lost some
 >> work.  Does it offer to save buffers on your Emacs 23?
 >
 > No it does not.  So your fix is certainly needed.

[...]

 > Breakpoint 1, abort () at /home/steve/cvsroot/emacs/src/emacs.c:428
 > 428	  kill (getpid (), SIGABRT);
 > (gdb) bt full
 > #0  abort () at /home/steve/cvsroot/emacs/src/emacs.c:428
 > No locals.
 > #1  0x08089931 in redisplay_internal (preserve_echo_area=<value optimized out>)
 >     at /home/steve/cvsroot/emacs/src/xdisp.c:11393
 > 	w = (struct window *) 0x0
 > 	pause = 0
 > 	must_finish = 0
 > 	number_of_visible_frames = 0
 > 	polling_stopped_here = 0
 > 	old_frame = 141412100
 > 	consider_all_windows_p = 0

Thanks!  Unless someone has a better idea, I'll check in my fix in a
couple of days.

martin







^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#1450: marked as done (w32_reset_fringes)
  2008-11-28 12:52 ` bug#1450: w32_reset_fringes martin rudalics
  2008-11-28 13:22   ` martin rudalics
@ 2008-12-23  8:05   ` Emacs bug Tracking System
  1 sibling, 0 replies; 10+ messages in thread
From: Emacs bug Tracking System @ 2008-12-23  8:05 UTC (permalink / raw)
  To: martin rudalics

[-- Attachment #1: Type: text/plain, Size: 827 bytes --]


Your message dated Tue, 23 Dec 2008 08:59:16 +0100
with message-id <49509A54.8000403@gmx.at>
and subject line Re: bug#1450: w32_reset_fringes
has caused the Emacs bug report #1450,
regarding w32_reset_fringes
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@emacsbugs.donarmstrong.com
immediately.)


-- 
1450: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1450
Emacs Bug Tracking System
Contact owner@emacsbugs.donarmstrong.com with problems

[-- Attachment #2: Type: message/rfc822, Size: 7994 bytes --]

From: martin rudalics <rudalics@gmx.at>
To: emacs-pretest-bug <emacs-pretest-bug@gnu.org>
Subject: w32_reset_fringes
Date: Fri, 28 Nov 2008 13:52:48 +0100
Message-ID: <492FE9A0.2080505@gmx.at>

The following is with Drew Adams `default-frame-alist' from bug#117 but
completely unrelated to the issues discussed there.  Hence .emacs is

(setq default-frame-alist
       '((foreground-color . "Black")
	(background-color . "LightBlue")
	(font . "-*-Lucida Console-normal-r-*-*-14-112-96-96-c-*-iso8859-1")
	(mouse-color . "Red")
	(cursor-color . "Red")
	(cursor-type . bar)
	(menu-bar-lines . 1)
	(top . 0)
	(left . 0)
	(width . 80)
	(height . 35)
	(minibuffer)
	(user-position . t)
	(vertical-scroll-bars . right)
	(icon-type)
	(left-fringe . 0)
	(right-fringe . 0)
	(fringe . 0)
	(menu-bar-lines . 1)
	(tool-bar-lines . 0)))

which gets you two frames - a main frame and a minibuffer frame.  In the
main frame type C-x C-f and then kill (with the window manager) the
minibuffer frame.

In GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600)
  of 2008-11-27 on MACHNO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4)'

this gets me

Current directory is c:/Programme/Emacs-trunk/src/
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-mingw32"...
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
DISPLAY =
TERM = emacs
Breakpoint 1 at 0x1151c6a: file w32fns.c, line 7279.
Breakpoint 2 at 0x109c79f: file sysdep.c, line 1135.
(gdb) run
btStarting program: c:/Programme/Emacs-trunk/bin/emacs.exe
[New thread 476.0x71c]
[New thread 476.0x1f4]

Breakpoint 1, w32_abort () at w32fns.c:7279
(gdb) bt
#0  w32_abort () at w32fns.c:7279
#1  0x010b5f36 in w32_reset_fringes () at fringe.c:1712
#2  0x01161def in x_delete_terminal (terminal=0x0) at w32term.c:6161
#3  0x010ddea9 in Fdelete_terminal (terminal=48912132, force=44013617) at terminal.c:334
#4  0x010efbdd in Fdelete_frame (frame=45964804, force=44013617) at frame.c:1515
#5  0x0100be38 in Ffuncall (nargs=3, args=0x12be1f0) at eval.c:3047
#6  0x01112783 in Fbyte_code (bytestr=45964800, vector=8579712, maxdepth=2) at bytecode.c:678
#7  0x0100b732 in funcall_lambda (fun=18827052, nargs=1, arg_vector=0x82ec24) at eval.c:3231
#8  0x0100bc27 in Ffuncall (nargs=2, args=0x11f472c) at eval.c:3101
#9  0x01110e2f in Fcall_interactively (function=44325801, record_flag=44013569, keys=48668580) at callint.c:857
#10 0x0100be21 in Ffuncall (nargs=4, args=0x12bee58) at eval.c:3050
#11 0x0100bff9 in call3 (fn=0, arg1=0, arg2=0, arg3=0) at eval.c:2870
#12 0x01056cc9 in Fcommand_execute (cmd=44325801, record_flag=44013569, keys=0, special=44013617) at keyboard.c:10333
#13 0x0105a5e2 in read_char (commandflag=1, nmaps=2, maps=0x82f090, prev_event=44013569, used_mouse_menu=0x82f0d8, end_time=0x0) at keyboard.c:3087
#14 0x0105c47d in read_key_sequence (keybuf=0x82f220, bufsize=30, prompt=44013569, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9344
#15 0x0105e342 in command_loop_1 () at keyboard.c:1621
#16 0x01009fae in internal_condition_case (bfun=0x105e190 <command_loop_1>, handlers=44077321, hfun=0x105773c <cmd_error>) at eval.c:1511
#17 0x01051cca in command_loop_2 () at keyboard.c:1338
#18 0x01009ee3 in internal_catch (tag=0, func=0x1051ca7 <command_loop_2>, arg=44013569) at eval.c:1247
#19 0x01051a83 in command_loop () at keyboard.c:1303
#20 0x01051b70 in recursive_edit_1 () at keyboard.c:942
#21 0x010fa4f9 in read_minibuf (map=44002797, initial=50364131, prompt=44152324, backup_n=33, expflag=0, histvar=0, histpos=0, defalt=44056819, allow_props=0, inherit_input_method=0) at minibuf.c:735
#22 0x010fb181 in Fcompleting_read (prompt=0, collection=0, predicate=0, require_match=44229137, initial_input=44093873, hist=44093873, def=44056819, inherit_input_method=44013569) at minibuf.c:1818
#23 0x0100bd45 in Ffuncall (nargs=8, args=0x12be6f8) at eval.c:3075
#24 0x01112783 in Fbyte_code (bytestr=45964800, vector=8582688, maxdepth=7) at bytecode.c:678
#25 0x0100b732 in funcall_lambda (fun=18560372, nargs=4, arg_vector=0x82f784) at eval.c:3231
#26 0x0100bc27 in Ffuncall (nargs=5, args=0x11b3574) at eval.c:3101
#27 0x01112783 in Fbyte_code (bytestr=45964800, vector=8583040, maxdepth=4) at bytecode.c:678
#28 0x0100b732 in funcall_lambda (fun=18474988, nargs=2, arg_vector=0x82f8d4) at eval.c:3231
#29 0x0100bc27 in Ffuncall (nargs=3, args=0x119e7ec) at eval.c:3101
#30 0x01112783 in Fbyte_code (bytestr=45964800, vector=8583376, maxdepth=2) at bytecode.c:678
#31 0x0100b356 in Feval (form=19656352) at eval.c:2381
#32 0x011105f8 in Fcall_interactively (function=44404073, record_flag=44013569, keys=44047108) at callint.c:361
#33 0x0100be21 in Ffuncall (nargs=4, args=0x12bee58) at eval.c:3050
#34 0x0100bff9 in call3 (fn=0, arg1=0, arg2=0, arg3=0) at eval.c:2870
#35 0x01056cc9 in Fcommand_execute (cmd=44404073, record_flag=44013569, keys=0, special=44013569) at keyboard.c:10333
#36 0x0105e4f5 in command_loop_1 () at keyboard.c:1880
#37 0x01009fae in internal_condition_case (bfun=0x105e190 <command_loop_1>, handlers=44077321, hfun=0x105773c <cmd_error>) at eval.c:1511
#38 0x01051cca in command_loop_2 () at keyboard.c:1338
#39 0x01009ee3 in internal_catch (tag=0, func=0x1051ca7 <command_loop_2>, arg=44013569) at eval.c:1247
#40 0x01051ad7 in command_loop () at keyboard.c:1317
#41 0x01051b70 in recursive_edit_1 () at keyboard.c:942
#42 0x01051c91 in Frecursive_edit () at keyboard.c:1004
#43 0x01002e46 in main (argc=1, argv=0xa327b8) at emacs.c:1777

Lisp Backtrace:
"delete-frame" (0x82ea84)
"handle-delete-frame" (0x82ec24)
"call-interactively" (0x82ee24)
"completing-read" (0x82f624)
"read-file-name" (0x82f784)
"find-file-read-args" (0x82f8d4)
"byte-code" (0x82f990)
"call-interactively" (0x82fc04)
(gdb)




[-- Attachment #3: Type: message/rfc822, Size: 1978 bytes --]

From: martin rudalics <rudalics@gmx.at>
To: 1450-done@emacsbugs.donarmstrong.com
Subject: Re: bug#1450: w32_reset_fringes
Date: Tue, 23 Dec 2008 08:59:16 +0100
Message-ID: <49509A54.8000403@gmx.at>

Fixed as

	* frame.c (delete_frame): New function derived from
	Fdelete_frame to handle Qnoelisp value for FORCE argument.
	Delete last frame iff FORCE equals Qnoelisp.  (Bug#1450)
	(Fdelete_frame): Call delete_frame.  Remove line from doc-string
	saying that FORCE non-nil doesn't run `delete-frame-functions'.
	* frame.h: Extern delete_frame.
	* window.c (window_loop):
	* terminal.c (delete_terminal):
	* xterm.c (x_connection_closed):
	* xfns.c (Fx_hide_tip):
	* w32fns.c (Fx_hide_tip): Call delete_frame instead of
	Fdelete_frame.

martin



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-12-23  8:05 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <49509A54.8000403@gmx.at>
2008-11-28 12:52 ` bug#1450: w32_reset_fringes martin rudalics
2008-11-28 13:22   ` martin rudalics
2008-11-28 17:27     ` martin rudalics
2008-11-28 22:04       ` Stephen Berman
2008-11-29 11:43         ` martin rudalics
2008-11-29 20:13           ` Stephen Berman
2008-11-30  9:19             ` martin rudalics
2008-12-02 14:14               ` Stephen Berman
2008-12-02 15:54                 ` martin rudalics
2008-12-23  8:05   ` bug#1450: marked as done (w32_reset_fringes) Emacs bug Tracking System

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).