* Killing a frame sometimes kills emacs @ 2011-08-31 20:16 Tassilo Horn 2011-08-31 20:51 ` joakim ` (2 more replies) 0 siblings, 3 replies; 39+ messages in thread From: Tassilo Horn @ 2011-08-31 20:16 UTC (permalink / raw) To: emacs-devel Hi all, since lately, I have a really annoying problem with the current emacs trunk. My current emacs is about 4 days old, but I've hit that problem already when I came back from holiday three weeks ago. The problem is that frequently, killing an emacs X11 frame kills the complete emacs instance. It doesn't crash or so, but it's just like if I had called `kill-emacs'. The usual steps are: 1. Start emacs (the server is activated from my .emacs) 2. Work for several hours without issues 3. emacsclient -c [maybe-a-file.txt] 4. kill the client frame with C-x 5 0, C-x #, or the X knob at the window decoration ==> BANG! Emacs is gone... My problem is that I'm totally unable to reproduce the issue. I've just tried to activate and use all packages/modes I usually work with (Gnus, Org, SLIME/Clojure, Elisp, AUCTeX, rcirc) step by step, but still creating and killing frames works as it's supposed to do. Do you have any suggestions on how to debug this issue? Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-08-31 20:16 Killing a frame sometimes kills emacs Tassilo Horn @ 2011-08-31 20:51 ` joakim 2011-08-31 23:06 ` chad 2011-09-01 2:53 ` Eli Zaretskii 2 siblings, 0 replies; 39+ messages in thread From: joakim @ 2011-08-31 20:51 UTC (permalink / raw) To: Tassilo Horn; +Cc: emacs-devel Tassilo Horn <tassilo@member.fsf.org> writes: > Hi all, > > since lately, I have a really annoying problem with the current emacs > trunk. My current emacs is about 4 days old, but I've hit that problem > already when I came back from holiday three weeks ago. > > The problem is that frequently, killing an emacs X11 frame kills the > complete emacs instance. It doesn't crash or so, but it's just like if > I had called `kill-emacs'. > > The usual steps are: > > 1. Start emacs (the server is activated from my .emacs) > 2. Work for several hours without issues > 3. emacsclient -c [maybe-a-file.txt] > 4. kill the client frame with C-x 5 0, C-x #, or the X knob at the > window decoration ==> BANG! Emacs is gone... > > My problem is that I'm totally unable to reproduce the issue. I've just > tried to activate and use all packages/modes I usually work with (Gnus, > Org, SLIME/Clojure, Elisp, AUCTeX, rcirc) step by step, but still > creating and killing frames works as it's supposed to do. > > Do you have any suggestions on how to debug this issue? > > Bye, > Tassilo Not much help, but I use the below bash script to run Emacs. That way I can get a backtrace most of the time which helps. (I'm also suffering from some weirdo heisenbug. Lately it has been something involving overlays and pop_it at xdisp.c:5492. It might be something local though) #!/bin/sh #cd to src dir to load emacs gdb macros cd ~/build_myprojs/emacsnew/emacs.bzr/xwidget/src/ xterm -e gdb -ex run emacs -- Joakim Verona ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-08-31 20:16 Killing a frame sometimes kills emacs Tassilo Horn 2011-08-31 20:51 ` joakim @ 2011-08-31 23:06 ` chad 2011-09-01 2:53 ` Eli Zaretskii 2 siblings, 0 replies; 39+ messages in thread From: chad @ 2011-08-31 23:06 UTC (permalink / raw) To: Tassilo Horn; +Cc: emacs-devel Do you have a non-nill confirm-kill-emacs? If not, try setting it. If so, have you tried (debug-on-entry 'kill-emacs)? Hope that helps, *Chad On Aug 31, 2011, at 1:16 PM, Tassilo Horn wrote: > Do you have any suggestions on how to debug this issue? ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-08-31 20:16 Killing a frame sometimes kills emacs Tassilo Horn 2011-08-31 20:51 ` joakim 2011-08-31 23:06 ` chad @ 2011-09-01 2:53 ` Eli Zaretskii 2011-09-01 7:04 ` Tassilo Horn 2011-09-01 10:09 ` Tassilo Horn 2 siblings, 2 replies; 39+ messages in thread From: Eli Zaretskii @ 2011-09-01 2:53 UTC (permalink / raw) To: Tassilo Horn; +Cc: emacs-devel > From: Tassilo Horn <tassilo@member.fsf.org> > Date: Wed, 31 Aug 2011 22:16:55 +0200 > > Do you have any suggestions on how to debug this issue? Run Emacs under a debugger, put a breakpoint on Fkill_emacs, and when this happens again, tell use who called it by showing the backtrace. ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 2:53 ` Eli Zaretskii @ 2011-09-01 7:04 ` Tassilo Horn 2011-09-01 10:09 ` Tassilo Horn 1 sibling, 0 replies; 39+ messages in thread From: Tassilo Horn @ 2011-09-01 7:04 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Tassilo Horn <tassilo@member.fsf.org> >> Date: Wed, 31 Aug 2011 22:16:55 +0200 >> >> Do you have any suggestions on how to debug this issue? > > Run Emacs under a debugger, put a breakpoint on Fkill_emacs, and when > this happens again, tell use who called it by showing the backtrace. Ok, breakpoint is set. Let's see what happens... Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 2:53 ` Eli Zaretskii 2011-09-01 7:04 ` Tassilo Horn @ 2011-09-01 10:09 ` Tassilo Horn 2011-09-01 10:27 ` Eli Zaretskii 2011-09-01 10:33 ` Andreas Schwab 1 sibling, 2 replies; 39+ messages in thread From: Tassilo Horn @ 2011-09-01 10:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: Hi Eli, >> From: Tassilo Horn <tassilo@member.fsf.org> >> Date: Wed, 31 Aug 2011 22:16:55 +0200 >> >> Do you have any suggestions on how to debug this issue? > > Run Emacs under a debugger, put a breakpoint on Fkill_emacs, and when > this happens again, tell use who called it by showing the backtrace. It turned out to be a crash, not something calling Fkill_emacs. Here's the backtrace: --8<---------------cut here---------------start------------->8--- Breakpoint 1 at 0x4f23dd: file emacs.c, line 1985. Starting program: /usr/bin/emacs-24 [Thread debugging using libthread_db enabled] [New Thread 0x7fffe6e80700 (LWP 31725)] [New Thread 0x7fffe667f700 (LWP 31726)] Program received signal SIGSEGV, Segmentation fault. 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 #0 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 No symbol table info available. #1 0x00007ffff759c93a in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #2 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #3 0x00007ffff7599f0e in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #4 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #5 0x00007ffff758c5d6 in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #6 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #7 0x00000000004e157c in xg_display_close (dpy=0x6ca0020) at gtkutil.c:182 gdpy = 0xd682e0 #8 0x00000000004afc49 in x_delete_terminal (terminal=<optimized out>) at xterm.c:10607 dpyinfo = 0x698d3e0 #9 0x00000000004a40f2 in Fdelete_terminal (terminal=107998581, force=<optimized out>) at terminal.c:345 t = 0x66fed70 #10 0x00000000004235cc in delete_frame (frame=99991829, force=<optimized out>) at frame.c:1379 tmp = <optimized out> terminal = <optimized out> f = 0x5f5c110 sf = 0x121b7e0 kb = 0x0 minibuffer_selected = 0 tooltip_frame = 0 #11 0x000000000042382a in Fdelete_frame (frame=<optimized out>, force=<optimized out>) at frame.c:1516 No locals. #12 0x000000000055d81f in Ffuncall (nargs=3, args=0x7fffffffc9f0) at eval.c:2993 fun = <optimized out> original_fun = <optimized out> funcar = <optimized out> numargs = <optimized out> lisp_numargs = <optimized out> val = <optimized out> backtrace = {next = 0x7fffffffcb70, function = 0x7fffffffc9f0, args = 0x7fffffffc9f8, nargs = 2, debug_on_exit = 0} internal_args = 0x7fffffffc9f8 i = <optimized out> #13 0x000000000058fafe in exec_byte_code (bytestr=<optimized out>, vector=<optimized out>, maxdepth=<optimized out>, args_template=11782610, nargs=<optimized out>, args=<optimized out>) at bytecode.c:785 count = 5 op = <optimized out> vectorp = 0x932cd0 stack = {pc = 0xa52aa6 "\202I", byte_string = 9645217, byte_string_start = 0xa52a62 "\b\211\030:\203\r", constants = 9645253, next = 0x0} top = 0x7fffffffc9f0 result = <optimized out> #14 0x000000000055d53b in funcall_lambda (fun=9645157, nargs=1, arg_vector=0x7fffffffcc38) at eval.c:3221 val = <optimized out> syms_left = <optimized out> next = <optimized out> lexenv = 11782610 i = <optimized out> optional = <optimized out> rest = <optimized out> #15 0x000000000055d927 in Ffuncall (nargs=2, args=0x7fffffffcc30) at eval.c:3039 fun = <optimized out> original_fun = 12164530 funcar = <optimized out> numargs = <optimized out> lisp_numargs = <optimized out> val = <optimized out> backtrace = {next = 0x7fffffffce20, function = 0x7fffffffcc30, args = 0x7fffffffcc38, nargs = 1, debug_on_exit = 0} internal_args = <optimized out> i = <optimized out> #16 0x000000000055ae47 in Fcall_interactively (function=12164530, record_flag=11782610, keys=1) at callint.c:857 val = <optimized out> args = 0x7fffffffcc30 visargs = 0x7fffffffcc10 specs = <optimized out> filter_specs = <optimized out> teml = <optimized out> up_event = 11782610 enable = 113302176 next_event = <optimized out> prefix_arg = 11782610 string = <optimized out> tem = <optimized out> varies = 0x7fffffffcbf0 "" i = <optimized out> nargs = <optimized out> foo = <optimized out> prompt1 = '\000' <repeats 99 times> tem1 = <optimized out> arg_from_tty = <optimized out> key_count = 1 record_then_fail = 0 save_this_command = 11782610 save_last_command = 12672082 save_this_original_command = 11782610 save_real_this_command = 11782610 #17 0x000000000055d837 in Ffuncall (nargs=4, args=0x7fffffffce90) at eval.c:2997 fun = <optimized out> original_fun = <optimized out> funcar = <optimized out> numargs = <optimized out> lisp_numargs = <optimized out> val = <optimized out> backtrace = {next = 0x0, function = 0x7fffffffce90, args = 0x7fffffffce98, nargs = 3, debug_on_exit = 0} internal_args = 0x7fffffffce98 i = <optimized out> #18 0x000000000055db17 in call3 (fn=<optimized out>, arg1=<optimized out>, arg2=<optimized out>, arg3=<optimized out>) at eval.c:2790 ret_ungc_val = 14066416 args = {11988402, 12164530, 11782610, 113302181} #19 0x00000000004f4349 in Fcommand_execute (cmd=12164530, record_flag=11782610, keys=113302181, special=<optimized out>) at keyboard.c:10271 final = <optimized out> tem = <optimized out> prefixarg = 11782610 #20 0x00000000004ff15f in read_char (commandflag=1, nmaps=6, maps=0x7fffffffd2a0, prev_event=11782610, used_mouse_menu=0x7fffffffd41c, end_time=0x0) at keyboard.c:2885 prev_buffer = 0x5b2eed0 c = 111001606 local_getcjmp = {{__jmpbuf = {28823509, 4398587453124662626, 11782610, 11782610, 111002422, 15938864, -4398585942129486494, 4398585288136217954}, __mask_was_saved = 0, __saved_mask = { __val = {18446744073709551615, 4294967297, 66, 0, 0, 0, 0, 0, 0, 0, 0, 95612629, 5932106, 0, 0, 95612624}}}} save_jump = {{__jmpbuf = {0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved = 0, __saved_mask = {__val = { 0 <repeats 16 times>}}}} key_already_recorded = 0 tem = 12164530 save = <optimized out> previous_echo_area_message = 11782610 also_record = 11782610 reread = 0 polling_stopped_here = 0 orig_kboard = 0xf33530 #21 0x0000000000500202 in read_key_sequence (keybuf=0x7fffffffd510, bufsize=30, prompt=11782610, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9280 interrupted_kboard = 0xf33530 interrupted_frame = 0x121b7e0 key = <optimized out> used_mouse_menu = 0 echo_local_start = 0 last_real_key_start = 0 keys_local_start = 0 local_first_binding = 0 from_string = 11782610 count = 2 t = 0 echo_start = 0 keys_start = 0 nmaps = <optimized out> nmaps_allocated = 6 defs = 0x7fffffffd260 submaps = 0x7fffffffd2a0 orig_local_map = 38705910 orig_keymap = 11782610 localized_local_map = 0 first_binding = 0 first_unbound = 31 mock_input = 0 fkey = {parent = 17464630, map = 17464630, start = 0, end = 0} keytran = {parent = 11762086, map = 11762086, start = 0, end = 0} indec = {parent = 17464614, map = 17464614, start = 0, end = 0} shift_translated = 0 delayed_switch_frame = 11782610 original_uppercase = 0 original_uppercase_position = -1 dummyflag = 0 starting_buffer = 0x5b2eed0 fake_prefixed_keys = 11782610 #22 0x0000000000501e6a in command_loop_1 () at keyboard.c:1445 cmd = <optimized out> keybuf = {96, 76, 0, 11782610, 11782658, 11782610, 11834802, 66165345, 140737488344496, 5738643, 7237112172834486626, -155, 140737488344496, 5738306, 11782610, 92448534, 92448534, 11782610, 0, -1, 140737488344544, 5206430, 11782610, 11782610, 92448534, 5206735, 0, 12347184, 11782610, 0} i = <optimized out> prev_modiff = 3409 prev_buffer = 0x5b2eed0 #23 0x000000000055bddc in internal_condition_case ( bfun=0x501b7d <command_loop_1>, handlers=11834802, hfun=0x4f71bf <cmd_error>) at eval.c:1491 val = <optimized out> c = {tag = 11782610, val = 11782610, next = 0x7fffffffd7d0, gcpro = 0x0, jmp = {{__jmpbuf = {12347184, 4398587353752950114, 12347184, 11782610, 0, -1, -4398585942355978910, 4398585508186576226}, __mask_was_saved = 0, __saved_mask = { __val = {0, 0, 18446744073709551615, 0, 140737351956354, 1, 0, 0, 140737257920136, 0, 12347184, 12347216, 12347184, 11782610, 140737351980821, 0}}}}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0} h = {handler = 11834802, var = 11782610, chosen_clause = 11782658, tag = 0x7fffffffd690, next = 0x0} #24 0x00000000004f6951 in command_loop_2 (ignore=<optimized out>) at keyboard.c:1156 val = 14066416 #25 0x000000000055bcb5 in internal_catch (tag= Cannot access memory at address 0xffffffffffffffe0 ) at eval.c:1248 c = {tag = 11830594, val = 11782610, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {12347184, 4398587353752950114, 12347184, 11782610, 0, -1, -4398585942406310558, 4398585508193260898}, __mask_was_saved = 0, __saved_mask = {__val = {11782610, 11810656, 0, 1, 5559583, 140737261559512, 0, 0, 12075264, 12075266, 11782610, 11782610, 0, 18446744073709551615, 5632154, 140737488345352}}}}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0} #26 0x00000000004f6ce7 in command_loop () at keyboard.c:1135 No locals. #27 recursive_edit_1 () at keyboard.c:756 val = 12347184 #28 0x00000000004f7017 in Frecursive_edit () at keyboard.c:820 buffer = 11782610 #29 0x00000000004f3cb5 in main (argc=<optimized out>, argv=0x7fffffffdd28) at emacs.c:1698 dummy = 140737353841976 stack_bottom_variable = 0 '\000' skip_args = 0 rlim = {rlim_cur = 8720000, rlim_max = 18446744073709551615} no_loadup = 0 junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x100000000 <Address 0x100000000 out of bounds> Continuing. Program received signal SIGSEGV, Segmentation fault. 0x00007ffff2466737 in kill () from /lib64/libc.so.6 A debugging session is active. Inferior 1 [process 31722] will be killed. Quit anyway? (y or n) --8<---------------cut here---------------end--------------->8--- Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:09 ` Tassilo Horn @ 2011-09-01 10:27 ` Eli Zaretskii 2011-09-01 10:42 ` Tassilo Horn 2011-09-01 10:33 ` Andreas Schwab 1 sibling, 1 reply; 39+ messages in thread From: Eli Zaretskii @ 2011-09-01 10:27 UTC (permalink / raw) To: Tassilo Horn; +Cc: emacs-devel > From: Tassilo Horn <tassilo@member.fsf.org> > Cc: emacs-devel@gnu.org > Date: Thu, 01 Sep 2011 12:09:30 +0200 > > Eli Zaretskii <eliz@gnu.org> writes: > > Hi Eli, > > >> From: Tassilo Horn <tassilo@member.fsf.org> > >> Date: Wed, 31 Aug 2011 22:16:55 +0200 > >> > >> Do you have any suggestions on how to debug this issue? > > > > Run Emacs under a debugger, put a breakpoint on Fkill_emacs, and when > > this happens again, tell use who called it by showing the backtrace. > > It turned out to be a crash, not something calling Fkill_emacs. Here's > the backtrace: What about the Lisp backtrace? And since this is an optimized build, the backtrace is almost useless anyway. Can you try reproducing this in an unoptimized build? > #7 0x00000000004e157c in xg_display_close (dpy=0x6ca0020) at gtkutil.c:182 > gdpy = 0xd682e0 > #8 0x00000000004afc49 in x_delete_terminal (terminal=<optimized out>) > at xterm.c:10607 > dpyinfo = 0x698d3e0 > #9 0x00000000004a40f2 in Fdelete_terminal (terminal=107998581, > force=<optimized out>) at terminal.c:345 > t = 0x66fed70 > #10 0x00000000004235cc in delete_frame (frame=99991829, force=<optimized out>) > at frame.c:1379 > tmp = <optimized out> > terminal = <optimized out> > f = 0x5f5c110 > sf = 0x121b7e0 > kb = 0x0 > minibuffer_selected = 0 > tooltip_frame = 0 > #11 0x000000000042382a in Fdelete_frame (frame=<optimized out>, > force=<optimized out>) at frame.c:1516 This part does look as if Emacs was going to close the X display where the frame was displayed. Were all other frames in that session on other displays? If not, how come Emacs is about to delete the terminal? Here's the relevant code: if (terminal->reference_count == 0) { Lisp_Object tmp; XSETTERMINAL (tmp, terminal); kb = NULL; Fdelete_terminal (tmp, NILP (force) ? Qt : force); } Can you look at the value of terminal->reference_count? ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:27 ` Eli Zaretskii @ 2011-09-01 10:42 ` Tassilo Horn 2011-09-01 10:56 ` Eli Zaretskii 0 siblings, 1 reply; 39+ messages in thread From: Tassilo Horn @ 2011-09-01 10:42 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> It turned out to be a crash, not something calling Fkill_emacs. Here's >> the backtrace: > > What about the Lisp backtrace? That would have been xbacktrace, right? Next time... > And since this is an optimized build, the backtrace is almost useless > anyway. Can you try reproducing this in an unoptimized build? That emacs was compiled with CFLAGS="-mtune=native -O1 -pipe -g -ggdb" and I'll try with -O0 the next time. >> #7 0x00000000004e157c in xg_display_close (dpy=0x6ca0020) at gtkutil.c:182 >> gdpy = 0xd682e0 >> #8 0x00000000004afc49 in x_delete_terminal (terminal=<optimized out>) >> at xterm.c:10607 >> dpyinfo = 0x698d3e0 >> #9 0x00000000004a40f2 in Fdelete_terminal (terminal=107998581, >> force=<optimized out>) at terminal.c:345 >> t = 0x66fed70 >> #10 0x00000000004235cc in delete_frame (frame=99991829, force=<optimized out>) >> at frame.c:1379 >> tmp = <optimized out> >> terminal = <optimized out> >> f = 0x5f5c110 >> sf = 0x121b7e0 >> kb = 0x0 >> minibuffer_selected = 0 >> tooltip_frame = 0 >> #11 0x000000000042382a in Fdelete_frame (frame=<optimized out>, >> force=<optimized out>) at frame.c:1516 > > This part does look as if Emacs was going to close the X display where > the frame was displayed. Were all other frames in that session on > other displays? No, there was exactly one single frame on the current display, and no TTY frames. Then I clicked some link to a txt file in the chromium browser, which fired up "emacsclient -c file.txt". So then I had exactly 2 X11 frames. Then I clicked the X knob of the frame brought up by the client, and that made emacs crash. > If not, how come Emacs is about to delete the terminal? Here's the > relevant code: > > if (terminal->reference_count == 0) > { > Lisp_Object tmp; > XSETTERMINAL (tmp, terminal); > > kb = NULL; > Fdelete_terminal (tmp, NILP (force) ? Qt : force); > } > > Can you look at the value of terminal->reference_count? In an unoptimized build, that should be in the backtrace, right? Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:42 ` Tassilo Horn @ 2011-09-01 10:56 ` Eli Zaretskii 2011-09-01 11:09 ` Tassilo Horn 0 siblings, 1 reply; 39+ messages in thread From: Eli Zaretskii @ 2011-09-01 10:56 UTC (permalink / raw) To: Tassilo Horn; +Cc: emacs-devel > From: Tassilo Horn <tassilo@member.fsf.org> > Cc: emacs-devel@gnu.org > Date: Thu, 01 Sep 2011 12:42:38 +0200 > > Eli Zaretskii <eliz@gnu.org> writes: > > >> It turned out to be a crash, not something calling Fkill_emacs. Here's > >> the backtrace: > > > > What about the Lisp backtrace? > > That would have been xbacktrace, right? Yes. But if you start GDB from the src directory, xbacktrace is automatically executed as part of backtrace. > > This part does look as if Emacs was going to close the X display where > > the frame was displayed. Were all other frames in that session on > > other displays? > > No, there was exactly one single frame on the current display, and no > TTY frames. Then I clicked some link to a txt file in the chromium > browser, which fired up "emacsclient -c file.txt". So then I had > exactly 2 X11 frames. Then I clicked the X knob of the frame brought up > by the client, and that made emacs crash. I think the crash is not the real problem here. The real problem here is that Emacs "thinks" there's only one frame on that display, so it is about to close the only display it has. Even if that doesn't segfault, it will kill the session. That is, if we can believe the backtrace. Btw, if it segfaulted in all the previous times, you should be able to see a message to that effect in your /var/log/messages (assuming this is GNU/Linux). If you don't see there any such message, I'd very much doubt that it segfaulted, but rather would think it indeed exited, because the only display was closed and its terminal deleted -- exactly what we see in the backtrace you posted. > > Can you look at the value of terminal->reference_count? > > In an unoptimized build, that should be in the backtrace, right? You should be able to get to the stack frame where delete_frame calls Fdelete_terminal (frame #10 in this case, but could be something else next time), and print the value, yes. ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:56 ` Eli Zaretskii @ 2011-09-01 11:09 ` Tassilo Horn 0 siblings, 0 replies; 39+ messages in thread From: Tassilo Horn @ 2011-09-01 11:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1071 bytes --] Eli Zaretskii <eliz@gnu.org> writes: Hi Eli, > I think the crash is not the real problem here. The real problem here > is that Emacs "thinks" there's only one frame on that display, so it > is about to close the only display it has. I'm happy to announce that now I'm able to reproduce the crash. It happens only if an emacs frame is opened for a file by the chromium web browser. For example, clicking "Export to BibTeX..." at http://www.citeulike.org/bibtex_options/user/azwinkau/article/6095606 will download some *.bib text file, and because emacsclient -c is set as default command for most text mime types, it will be invoked "somehow". When I invoke emacsclient from a terminal, or double-click a file in GNOME3's Nautilus, deleting that frame won't crash emacs. And neither does "gvfs-open some-file.txt". So it seems, chromium is doing something very special here... Attached are some backtraces from different crashes, all with unoptimized builds. I've produced one for each possibility to delete a frame (X knob, C-x #, C-x 5 0). Bye, Tassilo [-- Attachment #2: gdb-X-knob.txt --] [-- Type: text/plain, Size: 12521 bytes --] Starting program: /usr/bin/emacs-24 [Thread debugging using libthread_db enabled] [New Thread 0x7fffe6e80700 (LWP 30461)] [New Thread 0x7fffe667f700 (LWP 30462)] Program received signal SIGSEGV, Segmentation fault. 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 #0 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 No symbol table info available. #1 0x00007ffff759c93a in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #2 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #3 0x00007ffff7599f0e in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #4 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #5 0x00007ffff758c5d6 in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #6 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #7 0x0000000000538909 in xg_display_close (dpy=0x47cf7c0) at gtkutil.c:182 gdpy = 0xf912e0 #8 0x000000000050a260 in x_delete_terminal (terminal=0x2861c90) at xterm.c:10607 dpyinfo = 0x13b2000 #9 0x00000000004e88a2 in Fdelete_terminal (terminal=42343573, force=12671490) at terminal.c:345 t = 0x2861c90 #10 0x00000000004271cb in delete_frame (frame=140736951987109, force=12671490) at frame.c:1379 tmp = 42343573 terminal = 0x2861c90 f = 0x7fffe007aba0 sf = 0x12f7090 kb = 0x0 minibuffer_selected = 0 tooltip_frame = 0 #11 0x0000000000427519 in Fdelete_frame (frame=140736951987109, force=12671490) at frame.c:1516 No locals. #12 0x00000000005fe06f in Ffuncall (nargs=3, args=0x7fffffffc1a0) at eval.c:2993 fun = 9343565 original_fun = 12713650 funcar = 0 numargs = 2 lisp_numargs = 4 val = 140737488339344 backtrace = { next = 0x7fffffffc5f0, function = 0x7fffffffc1a0, args = 0x7fffffffc1a8, nargs = 2, debug_on_exit = 0 } internal_args = 0x7fffffffc1a8 i = 0 #13 0x0000000000649b21 in exec_byte_code (bytestr=10534465, vector=10534501, maxdepth=20, args_template=12671442, nargs=0, args=0x0) at bytecode.c:785 count = 5 op = 2 vectorp = 0xa0be70 stack = { pc = 0xb2bc46 "\202I", byte_string = 10534465, byte_string_start = 0xb2bc02 "\b\211\030:\203\r", constants = 10534501, next = 0x0 } top = 0x7fffffffc1a0 result = 0 #14 0x00000000005feab3 in funcall_lambda (fun=10534405, nargs=1, arg_vector=0xa0be65) at eval.c:3221 val = 6168715 syms_left = 12671442 next = 13293682 lexenv = 12671442 count = 4 i = 1 optional = 0 rest = 0 #15 0x00000000005fe25a in Ffuncall (nargs=2, args=0x7fffffffc6d0) at eval.c:3039 fun = 10534405 original_fun = 13053362 funcar = 140737488340592 numargs = 1 lisp_numargs = 6287324 val = 140737488340592 backtrace = { next = 0x7fffffffc9c0, function = 0x7fffffffc6d0, args = 0x7fffffffc6d8, nargs = 1, debug_on_exit = 0 } internal_args = 0xb7c900 i = 5642295 #16 0x00000000005f8104 in Fcall_interactively (function=13053362, record_flag=12671442, keys=72506901) at callint.c:857 val = 0 args = 0x7fffffffc6d0 visargs = 0x7fffffffc6b0 specs = 9582913 filter_specs = 9582913 teml = 140737258374800 up_event = 12671442 enable = 12671442 speccount = 2 next_event = 1 prefix_arg = 12671442 string = 0x7fffffffc6f0 "e" tem = 0x6b2ffc "" varies = 0x7fffffffc690 "" i = 2 nargs = 2 foo = 0 prompt1 = '\000' <repeats 99 times> tem1 = 0x0 arg_from_tty = 0 gcpro1 = { next = 0x7fffffffcae0, var = 0x56cb4b, nvars = 0 } gcpro2 = { next = 0x0, var = 0xc159d2, nvars = -4294967295 } gcpro3 = { next = 0x7fffffffcae0, var = 0x65555c, nvars = 2 } gcpro4 = { next = 0x0, var = 0xc159d2, nvars = 2 } gcpro5 = { next = 0x7fffffffc770, var = 0x5687b7, nvars = 140737488340832 } key_count = 1 record_then_fail = 0 save_this_command = 12671442 save_last_command = 25642514 save_this_original_command = 12671442 save_real_this_command = 12671442 #17 0x00000000005fe09e in Ffuncall (nargs=4, args=0x7fffffffca70) at eval.c:2997 fun = 12101389 original_fun = 12877234 funcar = 0 numargs = 3 lisp_numargs = 100000000 val = 0 backtrace = { next = 0x0, function = 0x7fffffffca70, args = 0x7fffffffca78, nargs = 3, debug_on_exit = 0 } internal_args = 0x7fffffffca78 i = 0 #18 0x00000000005fd856 in call3 (fn=12877234, arg1=13053362, arg2=12671442, arg3=72506901) at eval.c:2790 ret_ungc_val = 12671442 gcpro1 = { next = 0x7fffffffcab0, var = 0xa0be05, nvars = 4 } args = {12877234, 13053362, 12671442, 72506901} #19 0x0000000000573e51 in Fcommand_execute (cmd=13053362, record_flag=12671442, keys=72506901, special=12671490) at keyboard.c:10271 final = 13053362 tem = 12671442 prefixarg = 12671442 #20 0x0000000000565342 in read_char (commandflag=1, nmaps=6, maps=0x7fffffffcf30, prev_event=12671442, used_mouse_menu=0x7fffffffd154, end_time=0x0) at keyboard.c:2885 prev_buffer = 0x4310630 c = 63237174 jmpcount = 2 local_getcjmp = {{ __jmpbuf = {12671442, 6303929696820967229, 4286624, 140737488346352, 0, 0, 6303929696751761213, -6303928989598435523}, __mask_was_saved = 0, __saved_mask = { __val = {2532, 140737488342784, 6202213, 0, 12125936, 0, 0, 0, 70321712, 0, 12705522, 140737488342528, 6730481, 12671442, 14544838, 12671442} } }} save_jump = {{ __jmpbuf = {0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved = 0, __saved_mask = { __val = {0 <repeats 16 times>} } }} key_already_recorded = 0 tem = 13053362 save = 12671442 previous_echo_area_message = 12671442 also_record = 12671442 reread = 0 gcpro1 = { next = 0x7fffffffdcf0, var = 0x0, nvars = 12671442 } gcpro2 = { next = 0x1ffffcbd0, var = 0x3c37f96, nvars = 12705522 } polling_stopped_here = 0 orig_kboard = 0x10092a0 #21 0x0000000000571a84 in read_key_sequence (keybuf=0x7fffffffd3c0, bufsize=30, prompt=12671442, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9280 interrupted_kboard = 0x10092a0 interrupted_frame = 0x7fffe007aba0 key = 70321717 used_mouse_menu = 0 echo_local_start = 0 last_real_key_start = 0 keys_local_start = 0 local_first_binding = 0 from_string = 12671442 count = 2 t = 0 echo_start = 0 keys_start = 0 nmaps = 6 nmaps_allocated = 9 defs = 0x7fffffffced0 submaps = 0x7fffffffcf30 orig_local_map = 39941542 orig_keymap = 12671442 localized_local_map = 0 first_binding = 0 first_unbound = 31 mock_input = 0 fkey = { parent = 19442342, map = 19442342, start = 0, end = 0 } keytran = { parent = 12650918, map = 12650918, start = 0, end = 0 } indec = { parent = 19442326, map = 19442326, start = 0, end = 0 } shift_translated = 0 delayed_switch_frame = 12671442 original_uppercase = 140737488343920 original_uppercase_position = -1 dummyflag = 0 starting_buffer = 0x4310630 fake_prefixed_keys = 12671442 outer_gcpro1 = { next = 0x7fffffffd190, var = 0x5e1ada, nvars = 46480416 } #22 0x0000000000562385 in command_loop_1 () at keyboard.c:1445 cmd = 25642514 keybuf = {460, 76, 1316582004, 12671490, 140737488344192, 6428371, 38373794, 140737488344288, 12671490, 46702790, 12698763, 0, 140737488344128, 5229317, 4294956208, 12723634, 140737488344000, 39840065, 1, 12671442, 12671442, 43719457, 140737488344192, 12671490, 140737488344256, 5643180, 140737488344288, 46702758, 4286624, 19886224} i = 1 prev_modiff = 374 prev_buffer = 0x2c53c20 already_adjusted = 0 #23 0x00000000005fac48 in internal_condition_case (bfun=0x561f9e <command_loop_1>, handlers=12723634, hfun=0x56189d <cmd_error>) at eval.c:1491 val = 0 c = { tag = 12671442, val = 12671442, next = 0x7fffffffd710, gcpro = 0x0, jmp = {{ __jmpbuf = {0, 6303929697089402685, 4286624, 140737488346352, 0, 0, 6303929697087305533, -6303929074269112515}, __mask_was_saved = 0, __saved_mask = { __val = {12142814999440439101, 0, 4294967295, 5691303, 1, 9335432, 0, 0, 0, 0, 140737351956354, 1, 0, 1, 140737257920136, 0} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 12723634, var = 12671442, chosen_clause = 12671490, tag = 0x7fffffffd590, next = 0x0 } #24 0x0000000000561c96 in command_loop_2 (ignore=12671442) at keyboard.c:1156 val = 0 #25 0x00000000005fa5d4 in internal_catch (tag=12719426, func=0x561c70 <command_loop_2>, arg=12671442) at eval.c:1248 c = { tag = 12719426, val = 12671442, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {1, 6303929697175385917, 4286624, 140737488346352, 0, 0, 6303929697097791293, -6303929074484594883}, __mask_was_saved = 0, __saved_mask = { __val = {6168715, 112, 4301647972, 140737261559512, 12671442, 12125984, 12699488, 14, 1, 140737488345072, 12964096, 140737488345136, 12671442, 4286624, 140737488346352, 140737488345152} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } #26 0x0000000000561c49 in command_loop () at keyboard.c:1135 No locals. #27 0x00000000005613ed in recursive_edit_1 () at keyboard.c:756 count = 1 val = 12671442 #28 0x0000000000561588 in Frecursive_edit () at keyboard.c:820 count = 0 buffer = 12671442 #29 0x000000000055f749 in main (argc=1, argv=0x7fffffffdcf8) at emacs.c:1698 dummy = 140737353921744 stack_bottom_variable = 0 '\000' do_initial_setlocale = 1 skip_args = 0 rlim = { rlim_cur = 8720000, rlim_max = 18446744073709551615 } no_loadup = 0 junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x7ffff7fc3358 "@\344\377\367\377\177" Lisp Backtrace: "delete-frame" (0xffffc1a8) "handle-delete-frame" (0xffffc6d8) "call-interactively" (0xffffca78) "delete-frame" (0xffffc1a8) "handle-delete-frame" (0xffffc6d8) "call-interactively" (0xffffca78) A debugging session is active. Inferior 1 [process 30456] will be killed. Quit anyway? (y or n) [-- Attachment #3: gdb-C-#.txt --] [-- Type: text/plain, Size: 13839 bytes --] Starting program: /usr/bin/emacs-24 [Thread debugging using libthread_db enabled] [New Thread 0x7fffe6e80700 (LWP 30603)] [New Thread 0x7fffe667f700 (LWP 30604)] Program received signal SIGSEGV, Segmentation fault. 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 #0 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 No symbol table info available. #1 0x00007ffff759c93a in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #2 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #3 0x00007ffff7599f0e in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #4 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #5 0x00007ffff758c5d6 in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #6 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #7 0x0000000000538909 in xg_display_close (dpy=0x47c9690) at gtkutil.c:182 gdpy = 0xf912e0 #8 0x000000000050a260 in x_delete_terminal (terminal=0x4b7dae0) at xterm.c:10607 dpyinfo = 0x480b400 #9 0x00000000004e88a2 in Fdelete_terminal (terminal=79157989, force=12671490) at terminal.c:345 t = 0x4b7dae0 #10 0x00000000004271cb in delete_frame (frame=44243013, force=12671442) at frame.c:1379 tmp = 79157989 terminal = 0x4b7dae0 f = 0x2a31840 sf = 0x12f7110 kb = 0x0 minibuffer_selected = 0 tooltip_frame = 0 #11 0x0000000000427519 in Fdelete_frame (frame=44243013, force=12671442) at frame.c:1516 No locals. #12 0x00000000005fe06f in Ffuncall (nargs=2, args=0x7fffffffbb48) at eval.c:2993 fun = 9343565 original_fun = 12713650 funcar = 12671442 numargs = 1 lisp_numargs = 70368677 val = 12671442 backtrace = { next = 0x7fffffffbfb0, function = 0x7fffffffbb48, args = 0x7fffffffbb50, nargs = 1, debug_on_exit = 0 } internal_args = 0x7fffffffba60 i = 2 #13 0x0000000000649b21 in exec_byte_code (bytestr=30136353, vector=30613061, maxdepth=56, args_template=2052, nargs=1, args=0x7fffffffc088) at bytecode.c:785 count = 5 op = 1 vectorp = 0x1d31e50 stack = { pc = 0x1bcd055 "\210\001A\266\202\202o", byte_string = 30136353, byte_string_start = 0x1bccfc8 "\304\305\002\205\a", constants = 30613061, next = 0x7fffffffc0e0 } top = 0x7fffffffbb48 result = 12671442 #14 0x00000000005fe787 in funcall_lambda (fun=29742661, nargs=1, arg_vector=0x7fffffffc080) at eval.c:3155 val = 52943670 syms_left = 2052 next = 12862258 lexenv = 12671442 count = 5 i = 3 optional = 0 rest = 0 #15 0x00000000005fe25a in Ffuncall (nargs=2, args=0x7fffffffc078) at eval.c:3039 fun = 29742661 original_fun = 31058706 funcar = 12909218 numargs = 1 lisp_numargs = 12671394 val = 12671442 backtrace = { next = 0x7fffffffc4c0, function = 0x7fffffffc078, args = 0x7fffffffc080, nargs = 1, debug_on_exit = 0 } internal_args = 0x7fffffffc558 i = 53123014 #16 0x0000000000649b21 in exec_byte_code (bytestr=28579745, vector=29925013, maxdepth=48, args_template=2052, nargs=1, args=0x7fffffffc560) at bytecode.c:785 count = 5 op = 1 vectorp = 0x1c89ea0 stack = { pc = 0x1d3b2f4 "\210\210\001A\266\202\202\003", byte_string = 28579745, byte_string_start = 0x1d3b290 "ʼn\b\211\203m", constants = 29925013, next = 0x7fffffffc5b0 } top = 0x7fffffffc078 result = 12671442 #17 0x00000000005fe787 in funcall_lambda (fun=29925413, nargs=1, arg_vector=0x7fffffffc558) at eval.c:3155 val = 6283336 syms_left = 2052 next = 180388626432 lexenv = 140737488340112 count = 5 i = 0 optional = 0 rest = 0 #18 0x00000000005fe25a in Ffuncall (nargs=2, args=0x7fffffffc550) at eval.c:3039 fun = 29925413 original_fun = 29710274 funcar = 54089590 numargs = 1 lisp_numargs = 30383554 val = 12671442 backtrace = { next = 0x7fffffffc990, function = 0x7fffffffc550, args = 0x7fffffffc558, nargs = 1, debug_on_exit = 0 } internal_args = 0x7fffffffca40 i = 1 #19 0x0000000000649b21 in exec_byte_code (bytestr=28574065, vector=29925957, maxdepth=16, args_template=0, nargs=0, args=0x7fffffffca40) at bytecode.c:785 count = 5 op = 1 vectorp = 0x1c8a250 stack = { pc = 0x1d3b3f4 "\207", byte_string = 28574065, byte_string_start = 0x1d3b3c8 "\b\205,", constants = 29925957, next = 0x7fffffffca80 } top = 0x7fffffffc550 result = 12671442 #20 0x00000000005fe787 in funcall_lambda (fun=29926277, nargs=0, arg_vector=0x7fffffffca40) at eval.c:3155 val = 6607736 syms_left = 0 next = 75015221 lexenv = 12671442 count = 5 i = 140737488341552 optional = -1 rest = -1 #21 0x00000000005fe25a in Ffuncall (nargs=1, args=0x7fffffffca38) at eval.c:3039 fun = 29926277 original_fun = 29710322 funcar = 44243008 numargs = 0 lisp_numargs = 44243013 val = 12906178 backtrace = { next = 0x7fffffffce60, function = 0x7fffffffca38, args = 0x7fffffffca40, nargs = 0, debug_on_exit = 0 } internal_args = 0x7fffffffcf48 i = 12671442 #22 0x0000000000649b21 in exec_byte_code (bytestr=28557265, vector=29927637, maxdepth=16, args_template=1024, nargs=1, args=0x7fffffffcf50) at bytecode.c:785 count = 5 op = 0 vectorp = 0x1c8a8e0 stack = { pc = 0x1d3b564 "\"\207\311\312!\207", byte_string = 28557265, byte_string_start = 0x1d3b548 "\211\204\020", constants = 29927637, next = 0x0 } top = 0x7fffffffca38 result = 42799397 #23 0x00000000005fe787 in funcall_lambda (fun=29927957, nargs=1, arg_vector=0x7fffffffcf48) at eval.c:3155 val = 6168715 syms_left = 1024 next = 12671394 lexenv = 12671442 count = 5 i = 8589921872 optional = 0 rest = 5705370 #24 0x00000000005fe25a in Ffuncall (nargs=2, args=0x7fffffffcf40) at eval.c:3039 fun = 29927957 original_fun = 29710370 funcar = 140737488342752 numargs = 1 lisp_numargs = 6287324 val = 140737488342752 backtrace = { next = 0x7fffffffd230, function = 0x7fffffffcf40, args = 0x7fffffffcf48, nargs = 1, debug_on_exit = 0 } internal_args = 0x1d3b5a0 i = 5642295 #25 0x00000000005f8104 in Fcall_interactively (function=29710370, record_flag=12671442, keys=12717765) at callint.c:857 val = 0 args = 0x7fffffffcf40 visargs = 0x7fffffffcf20 specs = 28556033 filter_specs = 28556033 teml = 0 up_event = 12671442 enable = 12671442 speccount = 3 next_event = 2 prefix_arg = 12671442 string = 0x7fffffffcf60 "P" tem = 0x6b2ffc "" varies = 0x7fffffffcf00 "" i = 2 nargs = 2 foo = 0 prompt1 = '\000' <repeats 99 times> tem1 = 0x0 arg_from_tty = 0 gcpro1 = { next = 0x7fffffffd090, var = 0x7ffff24cc5da, nvars = 140737488343120 } gcpro2 = { next = 0x7fffffffd020, var = 0x7ffff7ffb8ad, nvars = 140737488343760 } gcpro3 = { next = 0xc159d2, var = 0x7ffff7ffb639, nvars = 2 } gcpro4 = { next = 0x1c55822, var = 0x12773c2, nvars = 2 } gcpro5 = { next = 0x7fffffffd020, var = 0x5feac8, nvars = 0 } key_count = 2 record_then_fail = 0 save_this_command = 29710370 save_last_command = 36428754 save_this_original_command = 29710370 save_real_this_command = 29710370 #26 0x00000000005fe09e in Ffuncall (nargs=4, args=0x7fffffffd2e0) at eval.c:2997 fun = 12101389 original_fun = 12877234 funcar = 0 numargs = 3 lisp_numargs = 0 val = 0 backtrace = { next = 0x0, function = 0x7fffffffd2e0, args = 0x7fffffffd2e8, nargs = 3, debug_on_exit = 0 } internal_args = 0x7fffffffd2e8 i = 0 #27 0x00000000005fd856 in call3 (fn=12877234, arg1=29710370, arg2=12671442, arg3=12671442) at eval.c:2790 ret_ungc_val = 12671442 gcpro1 = { next = 0x7fffffffd320, var = 0x1c8aa15, nvars = 4 } args = {12877234, 29710370, 12671442, 12671442} #28 0x0000000000573e51 in Fcommand_execute (cmd=29710370, record_flag=12671442, keys=12671442, special=12671442) at keyboard.c:10271 final = 29710370 tem = 12671442 prefixarg = 12671442 #29 0x0000000000562844 in command_loop_1 () at keyboard.c:1572 scount = 2 cmd = 29710370 keybuf = {96, 140, 4286624, 140737488346352, 140737488344080, 6167415, 140737488344160, 12671442, 276967387, 1, 140737488344160, 6169746, 12671442, 12859474, 140737488344240, 6168715, 12507328, 8589923456, 0, 12859472, 140737488344320, 6287904, 12981974, 8589934593, 12859474, 12671442, 0, 0, 4286624, 140737488346352} i = 2 prev_modiff = 27 prev_buffer = 0x478a430 already_adjusted = 0 #30 0x00000000005fac48 in internal_condition_case (bfun=0x561f9e <command_loop_1>, handlers=12723634, hfun=0x56189d <cmd_error>) at eval.c:1491 val = 0 c = { tag = 12671442, val = 12671442, next = 0x7fffffffd710, gcpro = 0x0, jmp = {{ __jmpbuf = {1, -5948150678907524226, 4286624, 140737488346352, 0, 0, -5948150678813152386, 5948150339555683198}, __mask_was_saved = 0, __saved_mask = { __val = {5948150339555683198, 0, 4294967295, 5691303, 1, 9335432, 0, 0, 0, 0, 140737351956354, 1, 0, 1, 140737257920136, 0} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 12723634, var = 12671442, chosen_clause = 12723634, tag = 0x7fffffffd590, next = 0x0 } #31 0x0000000000561c96 in command_loop_2 (ignore=12671442) at keyboard.c:1156 val = 1 #32 0x00000000005fa5d4 in internal_catch (tag=12719426, func=0x561c70 <command_loop_2>, arg=12671442) at eval.c:1248 c = { tag = 12719426, val = 12671442, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {1, -5948150678456636546, 4286624, 140737488346352, 0, 0, -5948150678899135618, 5948150339209128830}, __mask_was_saved = 0, __saved_mask = { __val = {6168715, 112, 4301647972, 140737261559512, 12671442, 12125984, 12699488, 14, 1, 140737488345072, 12964096, 140737488345136, 12671442, 4286624, 140737488346352, 140737488345152} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } #33 0x0000000000561c49 in command_loop () at keyboard.c:1135 No locals. #34 0x00000000005613ed in recursive_edit_1 () at keyboard.c:756 count = 1 val = 12671442 #35 0x0000000000561588 in Frecursive_edit () at keyboard.c:820 count = 0 buffer = 12671442 #36 0x000000000055f749 in main (argc=1, argv=0x7fffffffdcf8) at emacs.c:1698 dummy = 140737353921744 stack_bottom_variable = 0 '\000' do_initial_setlocale = 1 skip_args = 0 rlim = { rlim_cur = 8720000, rlim_max = 18446744073709551615 } no_loadup = 0 junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x7ffff7fc3358 "@\344\377\367\377\177" Lisp Backtrace: "delete-frame" (0xffffbb50) "server-delete-client" (0xffffc080) "server-buffer-done" (0xffffc558) "server-done" (0xffffca40) "server-edit" (0xffffcf48) "call-interactively" (0xffffd2e8) A debugging session is active. Inferior 1 [process 30598] will be killed. Quit anyway? (y or n) [-- Attachment #4: gdb-C-x-5-0.txt --] [-- Type: text/plain, Size: 8459 bytes --] Starting program: /usr/bin/emacs-24 [Thread debugging using libthread_db enabled] [New Thread 0x7fffe6e80700 (LWP 30710)] [New Thread 0x7fffe667f700 (LWP 30711)] Program received signal SIGSEGV, Segmentation fault. 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 #0 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 No symbol table info available. #1 0x00007ffff759c93a in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #2 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #3 0x00007ffff7599f0e in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #4 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #5 0x00007ffff758c5d6 in ?? () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #6 0x00007ffff65c1274 in g_object_unref () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #7 0x0000000000538909 in xg_display_close (dpy=0x2a339b0) at gtkutil.c:182 gdpy = 0xf912e0 #8 0x000000000050a260 in x_delete_terminal (terminal=0x2a45400) at xterm.c:10607 dpyinfo = 0x2a47400 #9 0x00000000004e88a2 in Fdelete_terminal (terminal=44323845, force=12671490) at terminal.c:345 t = 0x2a45400 #10 0x00000000004271cb in delete_frame (frame=44346293, force=12671442) at frame.c:1379 tmp = 44323845 terminal = 0x2a45400 f = 0x2a4abb0 sf = 0x1311e90 kb = 0x0 minibuffer_selected = 0 tooltip_frame = 0 #11 0x0000000000427519 in Fdelete_frame (frame=12671442, force=12671442) at frame.c:1516 No locals. #12 0x00000000005fe06f in Ffuncall (nargs=1, args=0x7fffffffcf50) at eval.c:2993 fun = 9343565 original_fun = 12713650 funcar = 140737488342784 numargs = 0 lisp_numargs = 6287324 val = 9379585 backtrace = { next = 0x7fffffffd230, function = 0x7fffffffcf50, args = 0x7fffffffcf58, nargs = 0, debug_on_exit = 0 } internal_args = 0x7fffffffce50 i = 2 #13 0x00000000005f8104 in Fcall_interactively (function=12713650, record_flag=12671442, keys=12717765) at callint.c:857 val = 0 args = 0x7fffffffcf50 visargs = 0x7fffffffcf30 specs = 9379585 filter_specs = 9379585 teml = 0 up_event = 12671442 enable = 12671442 speccount = 3 next_event = 3 prefix_arg = 12671442 string = 0x7fffffffcf70 "" tem = 0x7fffffffcf70 "" varies = 0x7fffffffcf20 "" i = 1 nargs = 1 foo = 0 prompt1 = '\000' <repeats 24 times>, "<B\017", '\000' <repeats 13 times>, "<B\017\000\000\000\000\000\301d_N\000\000\000\000\372\323\n\000\000\000\000\000\320\322\377\377\377\177\000\000\320\322\377\377\377\177\000\000p\323\377\377\377\177\000\000\276\063f\000\000\000\000\000\000 \000" tem1 = 0x0 arg_from_tty = 0 gcpro1 = { next = 0x7fffffffd090, var = 0x7ffff24cc5da, nvars = 140737488343120 } gcpro2 = { next = 0x7fffffffd020, var = 0x7ffff7ffb8ad, nvars = 140737488343760 } gcpro3 = { next = 0xc159d2, var = 0x7ffff7ffb639, nvars = 1 } gcpro4 = { next = 0xc1feb2, var = 0x12773c2, nvars = 1 } gcpro5 = { next = 0x7fffffffd020, var = 0x5feac8, nvars = 0 } key_count = 3 record_then_fail = 0 save_this_command = 12713650 save_last_command = 19208866 save_this_original_command = 12713650 save_real_this_command = 12713650 #14 0x00000000005fe09e in Ffuncall (nargs=4, args=0x7fffffffd2e0) at eval.c:2997 fun = 12101389 original_fun = 12877234 funcar = 0 numargs = 3 lisp_numargs = 0 val = 0 backtrace = { next = 0x0, function = 0x7fffffffd2e0, args = 0x7fffffffd2e8, nargs = 3, debug_on_exit = 0 } internal_args = 0x7fffffffd2e8 i = 0 #15 0x00000000005fd856 in call3 (fn=12877234, arg1=12713650, arg2=12671442, arg3=12671442) at eval.c:2790 ret_ungc_val = 12671442 gcpro1 = { next = 0x7fffffffd320, var = 0x8e924d, nvars = 4 } args = {12877234, 12713650, 12671442, 12671442} #16 0x0000000000573e51 in Fcommand_execute (cmd=12713650, record_flag=12671442, keys=12671442, special=12671442) at keyboard.c:10271 final = 12713650 tem = 12671442 prefixarg = 12671442 #17 0x0000000000562844 in command_loop_1 () at keyboard.c:1572 scount = 2 cmd = 12713650 keybuf = {96, 212, 192, 140737488346352, 140737488344080, 6167415, 140737488344160, 12671442, 276967387, 1, 140737488344160, 6169746, 12671442, 12859474, 140737488344240, 6168715, 12507328, 8589923456, 0, 12859472, 140737488344320, 6287904, 12981974, 8589934593, 12859474, 12671442, 0, 0, 4286624, 140737488346352} i = 3 prev_modiff = 27 prev_buffer = 0x2ebf030 already_adjusted = 0 #18 0x00000000005fac48 in internal_condition_case (bfun=0x561f9e <command_loop_1>, handlers=12723634, hfun=0x56189d <cmd_error>) at eval.c:1491 val = 0 c = { tag = 12671442, val = 12671442, next = 0x7fffffffd710, gcpro = 0x0, jmp = {{ __jmpbuf = {1, 5498248946679664099, 4286624, 140737488346352, 0, 0, 5498248946761453027, -5498249689761067549}, __mask_was_saved = 0, __saved_mask = { __val = {12948494383948484067, 0, 4294967295, 5691303, 1, 9335432, 0, 0, 0, 0, 140737351956354, 1, 0, 1, 140737257920136, 0} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 12723634, var = 12671442, chosen_clause = 12723634, tag = 0x7fffffffd590, next = 0x0 } #19 0x0000000000561c96 in command_loop_2 (ignore=12671442) at keyboard.c:1156 val = 1 #20 0x00000000005fa5d4 in internal_catch (tag=12719426, func=0x561c70 <command_loop_2>, arg=12671442) at eval.c:1248 c = { tag = 12719426, val = 12671442, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {1, 5498248946329439715, 4286624, 140737488346352, 0, 0, 5498248946671275491, -5498249689287635485}, __mask_was_saved = 0, __saved_mask = { __val = {6168715, 112, 4301647972, 140737261559512, 12671442, 12125984, 12699488, 14, 1, 140737488345072, 12964096, 140737488345136, 12671442, 4286624, 140737488346352, 140737488345152} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } #21 0x0000000000561c49 in command_loop () at keyboard.c:1135 No locals. #22 0x00000000005613ed in recursive_edit_1 () at keyboard.c:756 count = 1 val = 12671442 #23 0x0000000000561588 in Frecursive_edit () at keyboard.c:820 count = 0 buffer = 12671442 #24 0x000000000055f749 in main (argc=1, argv=0x7fffffffdcf8) at emacs.c:1698 dummy = 140737353921744 stack_bottom_variable = 0 '\000' do_initial_setlocale = 1 skip_args = 0 rlim = { rlim_cur = 8720000, rlim_max = 18446744073709551615 } no_loadup = 0 junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x7ffff7fc3358 "@\344\377\367\377\177" Lisp Backtrace: "delete-frame" (0xffffcf58) "call-interactively" (0xffffd2e8) A debugging session is active. Inferior 1 [process 30705] will be killed. Quit anyway? (y or n) ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:09 ` Tassilo Horn 2011-09-01 10:27 ` Eli Zaretskii @ 2011-09-01 10:33 ` Andreas Schwab 2011-09-01 10:45 ` Tassilo Horn 1 sibling, 1 reply; 39+ messages in thread From: Andreas Schwab @ 2011-09-01 10:33 UTC (permalink / raw) To: Tassilo Horn; +Cc: Eli Zaretskii, emacs-devel Tassilo Horn <tassilo@member.fsf.org> writes: > It turned out to be a crash, not something calling Fkill_emacs. Here's > the backtrace: > > Breakpoint 1 at 0x4f23dd: file emacs.c, line 1985. > Starting program: /usr/bin/emacs-24 > [Thread debugging using libthread_db enabled] > [New Thread 0x7fffe6e80700 (LWP 31725)] > [New Thread 0x7fffe667f700 (LWP 31726)] > > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 > #0 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 > No symbol table info available. > #1 0x00007ffff759c93a in ?? () from /usr/lib64/libgdk-3.so.0 Isn't that the known gtk bug with multiple displays? Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:33 ` Andreas Schwab @ 2011-09-01 10:45 ` Tassilo Horn 2011-09-01 12:47 ` Jan D. 0 siblings, 1 reply; 39+ messages in thread From: Tassilo Horn @ 2011-09-01 10:45 UTC (permalink / raw) To: Andreas Schwab; +Cc: Eli Zaretskii, emacs-devel Andreas Schwab <schwab@linux-m68k.org> writes: > Tassilo Horn <tassilo@member.fsf.org> writes: > >> It turned out to be a crash, not something calling Fkill_emacs. Here's >> the backtrace: >> >> Breakpoint 1 at 0x4f23dd: file emacs.c, line 1985. >> Starting program: /usr/bin/emacs-24 >> [Thread debugging using libthread_db enabled] >> [New Thread 0x7fffe6e80700 (LWP 31725)] >> [New Thread 0x7fffe667f700 (LWP 31726)] >> >> Program received signal SIGSEGV, Segmentation fault. >> 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 >> #0 0x00007ffff4dd1ecc in XFreeColormap () from /usr/lib64/libX11.so.6 >> No symbol table info available. >> #1 0x00007ffff759c93a in ?? () from /usr/lib64/libgdk-3.so.0 > > Isn't that the known gtk bug with multiple displays? As said in the reply to Eli, I don't have multiple displays. There's only one X instance in which emacs runs with exactly one X11 frame. Then I invoked "emacsclient -c" to get another X11 frame, and closing that made emacs crash. Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 10:45 ` Tassilo Horn @ 2011-09-01 12:47 ` Jan D. 2011-09-01 13:05 ` Tassilo Horn 2011-09-01 15:29 ` Eli Zaretskii 0 siblings, 2 replies; 39+ messages in thread From: Jan D. @ 2011-09-01 12:47 UTC (permalink / raw) To: Tassilo Horn; +Cc: Eli Zaretskii, Andreas Schwab, emacs-devel Tassilo Horn skrev 2011-09-01 12:45: > Andreas Schwab<schwab@linux-m68k.org> writes: > >> Isn't that the known gtk bug with multiple displays? > > As said in the reply to Eli, I don't have multiple displays. There's > only one X instance in which emacs runs with exactly one X11 frame. > Then I invoked "emacsclient -c" to get another X11 frame, and closing > that made emacs crash. From Emacs point of view, localhost:0 and unix:0 and :0 are three different displays, even if they physically are the same. Try doing the same and after you clicked the link in chromium, evaluate (x-display-list). If you have more than one entry, it is the Gtk+ problem. Jan D. ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 12:47 ` Jan D. @ 2011-09-01 13:05 ` Tassilo Horn 2011-09-01 15:29 ` Eli Zaretskii 1 sibling, 0 replies; 39+ messages in thread From: Tassilo Horn @ 2011-09-01 13:05 UTC (permalink / raw) To: Jan D.; +Cc: Eli Zaretskii, Andreas Schwab, emacs-devel "Jan D." <jan.h.d@swipnet.se> writes: >>> Isn't that the known gtk bug with multiple displays? >> >> As said in the reply to Eli, I don't have multiple displays. There's >> only one X instance in which emacs runs with exactly one X11 frame. >> Then I invoked "emacsclient -c" to get another X11 frame, and closing >> that made emacs crash. > > From Emacs point of view, localhost:0 and unix:0 and :0 are three > different displays, even if they physically are the same. > > Try doing the same and after you clicked the link in chromium, evaluate > (x-display-list). If you have more than one entry, it is the Gtk+ problem. Indeed, after opening a new emacs frame from chromium, I have two entries: (":0.0" ":0"). Before that, it was only (":0.0"). But still, since all other apps somehow spawning new emacs frames don't create this problem, I wonder if chromium does something special. I've checked its sources, and eventually it'll call something like XDGUtil("xdg-open", "path/to/file.txt"); You can check that function here: http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/chrome/browser/platform_util_linux.cc&l=17 That in turn calls LaunchProcess() http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/base/process_util_posix.cc&l=531 Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 12:47 ` Jan D. 2011-09-01 13:05 ` Tassilo Horn @ 2011-09-01 15:29 ` Eli Zaretskii 2011-09-01 19:30 ` Ken Raeburn 2011-10-11 6:46 ` Tassilo Horn 1 sibling, 2 replies; 39+ messages in thread From: Eli Zaretskii @ 2011-09-01 15:29 UTC (permalink / raw) To: Jan D.; +Cc: tassilo, schwab, emacs-devel > Date: Thu, 01 Sep 2011 14:47:09 +0200 > From: "Jan D." <jan.h.d@swipnet.se> > CC: Andreas Schwab <schwab@linux-m68k.org>, Eli Zaretskii <eliz@gnu.org>, > emacs-devel@gnu.org > > From Emacs point of view, localhost:0 and unix:0 and :0 are three > different displays, even if they physically are the same. Can't we do something in Emacs so it understood that they are on the same display? That won't fix the GTK problem, but at least it will work around it in this particular use case. And I think it's a Good Thing in general, no? ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 15:29 ` Eli Zaretskii @ 2011-09-01 19:30 ` Ken Raeburn 2011-09-02 15:02 ` Andreas Schwab 2011-10-11 6:46 ` Tassilo Horn 1 sibling, 1 reply; 39+ messages in thread From: Ken Raeburn @ 2011-09-01 19:30 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs Dev On Sep 1, 2011, at 11:29, Eli Zaretskii wrote: >> Date: Thu, 01 Sep 2011 14:47:09 +0200 >> From: "Jan D." <jan.h.d@swipnet.se> >> CC: Andreas Schwab <schwab@linux-m68k.org>, Eli Zaretskii <eliz@gnu.org>, >> emacs-devel@gnu.org >> >> From Emacs point of view, localhost:0 and unix:0 and :0 are three >> different displays, even if they physically are the same. > > Can't we do something in Emacs so it understood that they are on the > same display? That won't fix the GTK problem, but at least it will > work around it in this particular use case. And I think it's a Good > Thing in general, no? > If that's the intent of the X code... I've actually seen cases where the hostname "unix" gets looked up, so maybe the rule is "unix means the local host if you don't have a machine named unix". I'm not sure if that was X11 software or something else trying to interpret $DISPLAY, though; I was looking at DNS packet traces. In this case, ":0.0" vs ":0" is even more straightforward. According to the X man page I just looked up, at least, the default screen number is zero if omitted (not some changeable per-display default screen number), so counting those two as the same should be easy. Ken ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 19:30 ` Ken Raeburn @ 2011-09-02 15:02 ` Andreas Schwab 0 siblings, 0 replies; 39+ messages in thread From: Andreas Schwab @ 2011-09-02 15:02 UTC (permalink / raw) To: Ken Raeburn; +Cc: Eli Zaretskii, Emacs Dev Ken Raeburn <raeburn@raeburn.org> writes: > If that's the intent of the X code... I've actually seen cases where the > hostname "unix" gets looked up, so maybe the rule is "unix means the local > host if you don't have a machine named unix". At least libxcb (the X transport layer) recognizes unix:N specially. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-09-01 15:29 ` Eli Zaretskii 2011-09-01 19:30 ` Ken Raeburn @ 2011-10-11 6:46 ` Tassilo Horn 2011-10-11 12:53 ` Stefan Monnier 2011-10-11 17:56 ` Jan Djärv 1 sibling, 2 replies; 39+ messages in thread From: Tassilo Horn @ 2011-10-11 6:46 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Jan D., schwab, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> Date: Thu, 01 Sep 2011 14:47:09 +0200 >> From: "Jan D." <jan.h.d@swipnet.se> >> CC: Andreas Schwab <schwab@linux-m68k.org>, Eli Zaretskii <eliz@gnu.org>, >> emacs-devel@gnu.org >> >> From Emacs point of view, localhost:0 and unix:0 and :0 are three >> different displays, even if they physically are the same. > > Can't we do something in Emacs so it understood that they are on the > same display? That won't fix the GTK problem, but at least it will > work around it in this particular use case. And I think it's a Good > Thing in general, no? Any news on that front? I'm still accidentally killing emacs at least twice a day. And I'm already trying hard not to fire up an emacsclient X11 frame form external GTK apps, which is really really annoying. For example, when I click on a textfile link in a browser, I have to be sure to save it and then open it from inside emacs, instead of simply letting the browser invoke emacsclient after which I would have a frame that would kill emacs when being deleted... With resepect to the Emacs 24 release, it's very likely that a lot of users will suffer from this issue, so although it's a gtk bug, there should be some workaround (probably enabled by default). For me and I guess for most users, localhost:0, unix:0 (*), :0.0, and :0 are all the same in practice, only localhost:1 or :2 actually mean other displays. So I'd simply strip localhost and unix before the colon and dot-zeros. (Maybe there should be an option for that, or some lisp function that would be called to transform the display name if it is defined...) Bye, Tassilo (*) I'm not too sure with unix:0. I know such an entry only from xorg.conf to tell the xserver where the font server is running. ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 6:46 ` Tassilo Horn @ 2011-10-11 12:53 ` Stefan Monnier 2011-10-11 14:53 ` Tassilo Horn 2011-10-11 17:56 ` Jan Djärv 1 sibling, 1 reply; 39+ messages in thread From: Stefan Monnier @ 2011-10-11 12:53 UTC (permalink / raw) To: Tassilo Horn; +Cc: Eli Zaretskii, Jan D., schwab, emacs-devel > With resepect to the Emacs 24 release, it's very likely that a lot of > users will suffer from this issue, so although it's a gtk bug, there > should be some workaround (probably enabled by default). I can't imagine why "a lot of users" would run Emacs with different (but equivalent) values of $DISPLAY. Stefan ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 12:53 ` Stefan Monnier @ 2011-10-11 14:53 ` Tassilo Horn 2011-10-11 17:38 ` James Cloos 0 siblings, 1 reply; 39+ messages in thread From: Tassilo Horn @ 2011-10-11 14:53 UTC (permalink / raw) To: Stefan Monnier; +Cc: Eli Zaretskii, Jan D., schwab, Ulrich Mueller, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: Hi Stefan, >> With resepect to the Emacs 24 release, it's very likely that a lot of >> users will suffer from this issue, so although it's a gtk bug, there >> should be some workaround (probably enabled by default). > > I can't imagine why "a lot of users" would run Emacs with different > (but equivalent) values of $DISPLAY. They don't do that intentionally, it's a bug in GTK: https://bugzilla.gnome.org/show_bug.cgi?id=85715#c55 [Ulrich, I added you to Cc because you commented on the report above, so you probably know a bit better about what's going wrong there.] The problem in my usecase is that when I fire up emacs or emacsclient -c from the GNOME3 application menu or the run command dialog, it says it is on DISPLAY :0, i.e., (x-display-list) returns (":0"). In contrast, when I start emacs or emacsclient -c from a GNOME terminal or the file manager or web browser fire up an emacsclient -c, because I've set that up as default application for text files, the DISPLAY is :0.0. So as soon as I mix these two invocation styles, (x-display-list) returns (":0" ":0.0"). Those displays are different, and when I delete the last frame on one of the (equivalent) displays, emacs (including the original frames on the other displays) are killed. Not sure who kills emacs. Reading the bug report above, it seems that GTK deletes the display, and then emacs crashes because its display is gone. Maybe a workaround could be to initially tell GTK that emacs runs on both :0 and :0.0, so that GTK never thinks the last frame is going to be deleted. Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 14:53 ` Tassilo Horn @ 2011-10-11 17:38 ` James Cloos 2011-10-11 19:17 ` Tassilo Horn 2011-10-12 2:04 ` Chong Yidong 0 siblings, 2 replies; 39+ messages in thread From: James Cloos @ 2011-10-11 17:38 UTC (permalink / raw) To: Tassilo Horn Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, Eli Zaretskii, Jan D. >>>>> "TH" == Tassilo Horn <tassilo@member.fsf.org> writes: TH> So as soon as I mix these two invocation styles, (x-display-list) TH> returns (":0" ":0.0"). Those displays are different, and when I TH> delete the last frame on one of the (equivalent) displays, emacs TH> (including the original frames on the other displays) are killed. It seems, then, that emacs needs to canonicalize the DISPLAY strings before comparing them. I thought that I remembered some some code in libX11 and/or xtrans which does that, but a quick grep(1) did not illuminate any. (Apologies for the pun. Err, was that another one?) -JimC -- James Cloos <cloos@jhcloos.com> OpenPGP: 1024D/ED7DAEA6 ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 17:38 ` James Cloos @ 2011-10-11 19:17 ` Tassilo Horn 2011-10-11 19:49 ` Tassilo Horn 2011-10-12 2:04 ` Chong Yidong 1 sibling, 1 reply; 39+ messages in thread From: Tassilo Horn @ 2011-10-11 19:17 UTC (permalink / raw) To: James Cloos Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, Eli Zaretskii, Jan D. James Cloos <cloos@jhcloos.com> writes: > TH> So as soon as I mix these two invocation styles, (x-display-list) > TH> returns (":0" ":0.0"). Those displays are different, and when I > TH> delete the last frame on one of the (equivalent) displays, emacs > TH> (including the original frames on the other displays) are killed. > > It seems, then, that emacs needs to canonicalize the DISPLAY strings > before comparing them. It's not that emacs kills itself. It segfaults probably because gtk deletes/frees the display while emacs is still using it. (Well, or something like that...) Oh, checking the backtrace I've posted at the beginning of this thread, I've found this code in gtkutil.c: --8<---------------cut here---------------start------------->8--- #if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 10 /* GTK 2.2-2.8 has a bug that makes gdk_display_close crash (bug http://bugzilla.gnome.org/show_bug.cgi?id=85715). This way we can continue running, but there will be memory leaks. */ g_object_run_dispose (G_OBJECT (gdpy)); #else /* This seems to be fixed in GTK 2.10. */ gdk_display_close (gdpy); #endif } --8<---------------cut here---------------end--------------->8--- That's already the right workaround, isn't it? The only thing is that this bug is *not* fixed in GTK 2.10 but instead still exists (or exists again) in GTK 3.2.0. Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 19:17 ` Tassilo Horn @ 2011-10-11 19:49 ` Tassilo Horn 0 siblings, 0 replies; 39+ messages in thread From: Tassilo Horn @ 2011-10-11 19:49 UTC (permalink / raw) To: James Cloos Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, Eli Zaretskii, Jan D. Tassilo Horn <tassilo@member.fsf.org> writes: > Oh, checking the backtrace I've posted at the beginning of this thread, > I've found this code in gtkutil.c: > > #if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 10 > /* GTK 2.2-2.8 has a bug that makes gdk_display_close crash (bug > http://bugzilla.gnome.org/show_bug.cgi?id=85715). This way we > can continue running, but there will be memory leaks. */ > g_object_run_dispose (G_OBJECT (gdpy)); > #else > /* This seems to be fixed in GTK 2.10. */ > gdk_display_close (gdpy); > #endif > } > > That's already the right workaround, isn't it? The only thing is that > this bug is *not* fixed in GTK 2.10 but instead still exists (or > exists again) in GTK 3.2.0. I've just commented the line in the #else and recompiled emacs and reproduced the issue, i.e., started emacs using the application menu (resulting in a frame on display :0) and then opened another frame using emacsclient -c in a gnome terminal, so that in the end (x-display-list) returned (":0" ":0.0"). Then I deleted the frame created by emacsclient -c using C-x 5 0. The result is that the frame is still there but not functional. I can't even see the mouse pointer when hovering over it. From my perspective, that's an improvement. :-) (x-display-list) returns (":0") again. Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 17:38 ` James Cloos 2011-10-11 19:17 ` Tassilo Horn @ 2011-10-12 2:04 ` Chong Yidong 2011-10-12 6:49 ` Tassilo Horn 1 sibling, 1 reply; 39+ messages in thread From: Chong Yidong @ 2011-10-12 2:04 UTC (permalink / raw) To: James Cloos Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, Tassilo Horn, Jan D., Eli Zaretskii James Cloos <cloos@jhcloos.com> writes: > It seems, then, that emacs needs to canonicalize the DISPLAY strings > before comparing them. > > I thought that I remembered some some code in libX11 and/or xtrans > which does that, but a quick grep(1) did not illuminate any. I'm not sure that can be made to work reliably. Perhaps what we should do, instead, is to avoid deleting terminals in delete_frame if Emacs is compiled with GTK. The original intention was for Emacs to close remote X connections when we're done with them. But if GTK responds to an X connection closing by crashing, maybe we should just not close those X connections at all. Tassilo, could you experiment with commenting out the terminal deletion code in frame.c:1362, and see what the behavior is like? ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-12 2:04 ` Chong Yidong @ 2011-10-12 6:49 ` Tassilo Horn 2011-10-12 12:57 ` Stefan Monnier 0 siblings, 1 reply; 39+ messages in thread From: Tassilo Horn @ 2011-10-12 6:49 UTC (permalink / raw) To: Chong Yidong Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, James Cloos, Eli Zaretskii, Jan D. Chong Yidong <cyd@stupidchicken.com> writes: > James Cloos <cloos@jhcloos.com> writes: > >> It seems, then, that emacs needs to canonicalize the DISPLAY strings >> before comparing them. >> >> I thought that I remembered some some code in libX11 and/or xtrans >> which does that, but a quick grep(1) did not illuminate any. > > I'm not sure that can be made to work reliably. > > Perhaps what we should do, instead, is to avoid deleting terminals in > delete_frame if Emacs is compiled with GTK. The original intention was > for Emacs to close remote X connections when we're done with them. But > if GTK responds to an X connection closing by crashing, maybe we should > just not close those X connections at all. > > Tassilo, could you experiment with commenting out the terminal deletion > code in frame.c:1362, and see what the behavior is like? I commente 3 lines as indicated below: --8<---------------cut here---------------start------------->8--- /* If needed, delete the terminal that this frame was on. (This must be done after the frame is killed.) */ terminal->reference_count--; if (terminal->reference_count == 0) { // Lisp_Object tmp; // XSETTERMINAL (tmp, terminal); kb = NULL; // Fdelete_terminal (tmp, NILP (force) ? Qt : force); } else kb = terminal->kboard; --8<---------------cut here---------------end--------------->8--- I'm not sure if keeping the "kb = NULL;" was correct, though. If you want, I can try again with the complete then block commented. Ok, at first, it seemed to work fine. I could create and delete frames without crashing emacs, although (x-display-list) returned (":0" ":0.0"). However, after the n-th cycle in my create/delete random frames test, emacs eventually crashed. This is the backtrace: --8<---------------cut here---------------start------------->8--- % gdb /usr/bin/emacs-24 GNU gdb (Gentoo 7.3.1 p1) 7.3.1 Copyright (C) 2011 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 "x86_64-pc-linux-gnu". For bug reporting instructions, please see: <http://bugs.gentoo.org/>... Reading symbols from /usr/bin/emacs-24...done. SIGINT is used by the debugger. Are you sure you want to change it? (y or n) [answered Y; input not from terminal] DISPLAY = :0.0 TERM = xterm-256color Breakpoint 1 at 0x55eebb: file emacs.c, line 386. Temporary breakpoint 2 at 0x5831a4: file sysdep.c, line 858. (gdb) run Starting program: /usr/bin/emacs-24 [Thread debugging using libthread_db enabled] [New Thread 0x7fffe6b98700 (LWP 1695)] [New Thread 0x7fffe6396700 (LWP 1696)] (emacs-24:1692): Gtk-CRITICAL **: gtk_style_context_get: assertion `priv->widget_path != NULL' failed Program received signal SIGSEGV, Segmentation fault. 0x00007ffff6ce6fa5 in cairo_pattern_reference () from /usr/lib64/libcairo.so.2 (gdb) bt full #0 0x00007ffff6ce6fa5 in cairo_pattern_reference () from /usr/lib64/libcairo.so.2 No symbol table info available. #1 0x00007ffff75364bb in gdk_window_set_background_pattern () from /usr/lib64/libgdk-3.so.0 No symbol table info available. #2 0x00007ffff795f600 in gtk_style_context_set_background () from /usr/lib64/libgtk-3.so.0 No symbol table info available. #3 0x00007ffff7a1fb4d in ?? () from /usr/lib64/libgtk-3.so.0 No symbol table info available. #4 0x00007ffff65656a5 in g_closure_invoke () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #5 0x00007ffff65775b2 in ?? () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #6 0x00007ffff65810b4 in g_signal_emit_valist () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #7 0x00007ffff6581243 in g_signal_emit () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #8 0x00007ffff7a1aaa2 in ?? () from /usr/lib64/libgtk-3.so.0 No symbol table info available. ---Type <return> to continue, or q <return> to quit--- #9 0x00007ffff65656a5 in g_closure_invoke () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #10 0x00007ffff6577dc1 in ?? () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #11 0x00007ffff65810b4 in g_signal_emit_valist () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #12 0x00007ffff6581243 in g_signal_emit () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #13 0x00007ffff795f081 in gtk_style_context_invalidate () from /usr/lib64/libgtk-3.so.0 No symbol table info available. #14 0x00007ffff7a1f1e7 in gtk_widget_get_style_context () from /usr/lib64/libgtk-3.so.0 No symbol table info available. #15 0x00007ffff789b497 in ?? () from /usr/lib64/libgtk-3.so.0 No symbol table info available. #16 0x00007ffff65656a5 in g_closure_invoke () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #17 0x00007ffff65775b2 in ?? () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. ---Type <return> to continue, or q <return> to quit--- #18 0x00007ffff65810b4 in g_signal_emit_valist () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #19 0x00007ffff6581243 in g_signal_emit () from /usr/lib64/libgobject-2.0.so.0 No symbol table info available. #20 0x00007ffff7a1cd18 in gtk_widget_realize () from /usr/lib64/libgtk-3.so.0 No symbol table info available. #21 0x000000000053beac in xg_create_frame_widgets (f=0x27852d0) at gtkutil.c:1186 wtop = 0x15fd730 wvbox = 0x12d70c0 whbox = 0x1615a70 wfixed = 0x12d7df0 title = 0x12e4200 "emacs-24@thinkpad.tsdh.de" #22 0x0000000000510454 in x_window (f=0x27852d0) at xfns.c:2612 No locals. #23 0x0000000000512259 in Fx_create_frame (parms=40860694) at xfns.c:3359 f = 0x27852d0 frame = 41439957 tem = 12741026 name = 12741026 minibuffer_only = 0 window_prompting = 0 ---Type <return> to continue, or q <return> to quit--- width = 0 height = 12741074 count = 20 gcpro1 = { next = 0xc269d2, var = 0x5daca4, nvars = 140737488323976 } gcpro2 = { next = 0x29b2ff6, var = 0x4b, nvars = 40862230 } gcpro3 = { next = 0x0, var = 0x0, nvars = 12 } gcpro4 = { next = 0x26f8216, var = 0x16012e3993, nvars = 12866354 } ---Type <return> to continue, or q <return> to quit--- display = 40495777 dpyinfo = 0x10a9940 parent = 12741074 kb = 0x1091c00 #24 0x00000000005ffa39 in Ffuncall (nargs=2, args=0x7fffffff8a60) at eval.c:2974 fun = 9368773 original_fun = 13048258 funcar = 12741074 numargs = 1 lisp_numargs = 40840886 val = 40862230 backtrace = { next = 0x7fffffff8ea0, function = 0x7fffffff8a60, args = 0x7fffffff8a68, nargs = 1, debug_on_exit = 0 } internal_args = 0x7fffffff8a68 i = 13375296 #25 0x000000000064b475 in exec_byte_code (bytestr=9908065, vector=9908101, maxdepth=16, args_template=12741074, nargs=0, args=0x0) at bytecode.c:785 ---Type <return> to continue, or q <return> to quit--- count = 15 op = 1 vectorp = 0x972f90 stack = { pc = 0xb6224c "\024Ύ\317\f!\210\320\f\b\"\210\321\f\322\"\210\323\f\b\"\210\n\204W", byte_string = 9908065, byte_string_start = 0xb62216 "\306\b!\020\307\b!\031\310\b\236\032\311\033ʉ\034\035\v\312\036\026\211\036\027\203\060", constants = 9908101, next = 0x7fffffff8fa0 } top = 0x7fffffff8a60 result = 0 #26 0x00000000006004a4 in funcall_lambda (fun=9907997, nargs=1, arg_vector=0x972f85) at eval.c:3205 val = 1 syms_left = 12741074 next = 13559378 lexenv = 12741074 count = 14 i = 1 optional = 1 ---Type <return> to continue, or q <return> to quit--- rest = 0 #27 0x00000000005ffc4b in Ffuncall (nargs=2, args=0x7fffffff8f30) at eval.c:3023 fun = 9907997 original_fun = 13375106 funcar = 19806420 numargs = 1 lisp_numargs = 12923922 val = 12741074 backtrace = { next = 0x7fffffff9380, function = 0x7fffffff8f30, args = 0x7fffffff8f38, nargs = 1, debug_on_exit = 0 } internal_args = 0x200 i = 18695024 #28 0x000000000064b475 in exec_byte_code (bytestr=10554729, vector=10554765, maxdepth=20, args_template=12741074, nargs=0, args=0x0) at bytecode.c:785 count = 9 op = 1 vectorp = 0xa10d98 ---Type <return> to continue, or q <return> to quit--- stack = { pc = 0xb2cfcf "\026\027\320\016\027!\210\016\035\311\036\036\211\036\037\203", <incomplete sequence \354>, byte_string = 10554729, byte_string_start = 0xb2cf1f "\306\b\236\203,", constants = 10554765, next = 0x7fffffff9470 } top = 0x7fffffff8f30 result = 29 #29 0x00000000006004a4 in funcall_lambda (fun=10554669, nargs=1, arg_vector=0xa10d8d) at eval.c:3205 val = 10552905 syms_left = 12741074 next = 13559378 lexenv = 12741074 count = 8 i = 1 optional = 1 rest = 0 #30 0x00000000005ffc4b in Ffuncall (nargs=2, args=0x7fffffff9410) at eval.c:3023 fun = 10554669 ---Type <return> to continue, or q <return> to quit--- original_fun = 13811954 funcar = 140737488327680 numargs = 1 lisp_numargs = 6293965 val = 40862342 backtrace = { next = 0x7fffffff9850, function = 0x7fffffff9410, args = 0x7fffffff9418, nargs = 1, debug_on_exit = 0 } internal_args = 0x180 i = 12741074 #31 0x000000000064b475 in exec_byte_code (bytestr=10552641, vector=10552677, maxdepth=16, args_template=12741074, nargs=0, args=0x0) at bytecode.c:785 count = 8 op = 1 vectorp = 0xa10570 stack = { pc = 0xb2d227 "\207", byte_string = 10552641, byte_string_start = 0xb2d1cb "\306\307!\203\037", ---Type <return> to continue, or q <return> to quit--- constants = 10552677, next = 0x7fffffff9990 } top = 0x7fffffff9410 result = 40862598 #32 0x00000000006004a4 in funcall_lambda (fun=10552565, nargs=2, arg_vector=0xa10565) at eval.c:3205 val = 40862598 syms_left = 12741074 next = 13559378 lexenv = 12741074 count = 6 i = 2 optional = 1 rest = 0 #33 0x00000000005ffc4b in Ffuncall (nargs=3, args=0x7fffffff9920) at eval.c:3023 fun = 10552565 original_fun = 15996290 funcar = 0 numargs = 2 lisp_numargs = 0 val = 40862390 ---Type <return> to continue, or q <return> to quit--- backtrace = { next = 0x7fffffff9d70, function = 0x7fffffff9920, args = 0x7fffffff9928, nargs = 2, debug_on_exit = 0 } internal_args = 0x7fffffff9e90 i = 12903362 #34 0x000000000064b475 in exec_byte_code (bytestr=30250433, vector=30253029, maxdepth=52, args_template=5136, nargs=5, args=0x7fffffff9eb8) at bytecode.c:785 count = 6 op = 2 vectorp = 0x1cd9ff0 stack = { pc = 0x1c24d5a "\262\001\305\326\327\003\"\006\a\"\210\330\001!\210\331\006\006\332\003#\210\331\006\006\333\334\004!#\210\335\336\337!\340\"\210\207", byte_string = 30250433, byte_string_start = 0x1c24d08 "\300\301\302\"\210\303\304!\204\027", constants = 30253029, next = 0x7fffffff9f40 ---Type <return> to continue, or q <return> to quit--- } top = 0x7fffffff9920 result = 12741074 #35 0x0000000000600178 in funcall_lambda (fun=30253509, nargs=5, arg_vector=0x7fffffff9e90) at eval.c:3139 val = 12741074 syms_left = 5136 next = 4294967296 lexenv = 2 count = 6 i = 140737488325488 optional = 0 rest = 4000 #36 0x00000000005ffc4b in Ffuncall (nargs=6, args=0x7fffffff9e88) at eval.c:3023 fun = 30253509 original_fun = 30227618 funcar = 12741074 numargs = 5 lisp_numargs = 30261057 val = 12741074 backtrace = { next = 0x7fffffffa320, ---Type <return> to continue, or q <return> to quit--- function = 0x7fffffff9e88, args = 0x7fffffff9e90, nargs = 5, debug_on_exit = 0 } internal_args = 0x7fffffffa3c8 i = 4 #37 0x000000000064b475 in exec_byte_code (bytestr=30257729, vector=31398373, maxdepth=128, args_template=0, nargs=0, args=0x7fffffffa3c8) at bytecode.c:785 count = 6 op = 5 vectorp = 0x1df19f0 stack = { pc = 0x1c25512 "\202\024\003\005@\205\024\003\201O", byte_string = 30257729, byte_string_start = 0x1c25210 "\305\300!\210\306\300\307\310\311 !\312Q\"\210\313\312\301@\"\204&", constants = 31398373, next = 0x7fffffffa760 } top = 0x7fffffff9e88 result = 12741074 ---Type <return> to continue, or q <return> to quit--- #38 0x0000000000600178 in funcall_lambda (fun=41183989, nargs=0, arg_vector=0x7fffffffa3c8) at eval.c:3139 val = 17179869184 syms_left = 0 next = 4294967295 lexenv = 48 count = 6 i = 14 optional = 0 rest = 0 #39 0x00000000005ffc4b in Ffuncall (nargs=1, args=0x7fffffffa3c0) at eval.c:3023 fun = 41183989 original_fun = 41183989 funcar = 2 numargs = 0 lisp_numargs = 6136368 val = 140737488331728 backtrace = { next = 0x7fffffffa490, function = 0x7fffffffa3c0, args = 0x7fffffffa3c8, nargs = 0, ---Type <return> to continue, or q <return> to quit--- debug_on_exit = 0 } internal_args = 0x7fffffffa3c0 i = 41091136 #40 0x00000000005fe29d in eval_sub (form=40798342) at eval.c:2294 vals = 0x7fffffffa3c0 argnum = 1 sa_count = 6 sa_must_free = 0 numargs = 4 args_left = 12741074 i = -23616 maxargs = 12741074 argvals = {4208, 17200861749, 140737488331824, 6144291, 0, 39369040, 140737261112960, 48} fun = 12111453 val = 140737488332112 original_fun = 12865122 original_args = 40798358 funcar = 140737488332560 backtrace = { next = 0x7fffffffab40, function = 0x7fffffffa4c8, ---Type <return> to continue, or q <return> to quit--- args = 0x7fffffffa3c0, nargs = 1, debug_on_exit = 0 } gcpro1 = { next = 0x5, var = 0x5da230, nvars = 80 } gcpro2 = { next = 0x2730040, var = 0x258b950, nvars = 140737488331936 } gcpro3 = { next = 0x5, var = 0x7fffffffa3c0, nvars = 1 } #41 0x00000000005fc55c in internal_lisp_condition_case (var=30257938, bodyform=40798342, handlers=40798246) at eval.c:1453 val = 12741074 c = { ---Type <return> to continue, or q <return> to quit--- tag = 12741074, val = 12741074, next = 0x7fffffffad90, gcpro = 0x0, jmp = {{ __jmpbuf = {140737488333800, -1323075187161163761, 12741074, 30227042, 0, 0, -1323075187112929265, 1323074641310652431}, __mask_was_saved = 0, __saved_mask = { __val = {12741074, 140737488332480, 6289701, 140737488332080, 0, 140737488332528, 6, 140737488333632, 140737488332528, 140737488332536, 5, 0, 140737488332512, 40798310, 12865122, 12806098} } }}, backlist = 0x7fffffffab40, handlerlist = 0x7fffffffb510, lisp_eval_depth = 3, pdlcount = 6, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x7fffffffa760 } ---Type <return> to continue, or q <return> to quit--- h = { handler = 40798246, var = 30257938, chosen_clause = 140737488332240, tag = 0x7fffffffa5a0, next = 0x7fffffffb510 } #42 0x000000000064c12e in exec_byte_code (bytestr=30256865, vector=20979829, maxdepth=40, args_template=0, nargs=0, args=0x7fffffffabe8) at bytecode.c:981 handlers = 40798246 body = 40798342 count = 6 op = 143 vectorp = 0x1402080 stack = { pc = 0x1c25147 "\207", byte_string = 30256865, byte_string_start = 0x1c250b8 "\302\303\301@P\300\"\210\304\300\305\"\204V", constants = 20979829, next = 0x7fffffffaf50 } ---Type <return> to continue, or q <return> to quit--- top = 0x7fffffffa6d0 result = 0 #43 0x0000000000600178 in funcall_lambda (fun=23586533, nargs=0, arg_vector=0x7fffffffabe8) at eval.c:3139 val = 12741074 syms_left = 0 next = 17179869184 lexenv = 48 count = 6 i = 140737261112960 optional = 0 rest = 20979824 #44 0x00000000005ffc4b in Ffuncall (nargs=1, args=0x7fffffffabe0) at eval.c:3023 fun = 23586533 original_fun = 23586533 funcar = 40 numargs = 0 lisp_numargs = 30077512146 val = 2 backtrace = { next = 0x7fffffffacb0, function = 0x7fffffffabe0, ---Type <return> to continue, or q <return> to quit--- args = 0x7fffffffabe8, nargs = 0, debug_on_exit = 0 } internal_args = 0x7fffffffabe0 i = 100000000 #45 0x00000000005fe29d in eval_sub (form=40798374) at eval.c:2294 vals = 0x7fffffffabe0 argnum = 1 sa_count = 6 sa_must_free = 0 numargs = 4 args_left = 12741074 i = -21536 maxargs = 12741074 argvals = {5, 0, 0, 140737257928336, 20979824, 23586528, 140737488333952, 12741074} fun = 12111453 val = 4294946656 original_fun = 12865122 original_args = 40798390 funcar = 152 backtrace = { ---Type <return> to continue, or q <return> to quit--- next = 0x7fffffffb330, function = 0x7ffffffface8, args = 0x7fffffffabe0, nargs = 1, debug_on_exit = 0 } gcpro1 = { next = 0x5, var = 0x700000000, nvars = 23586584 } gcpro2 = { next = 0x27ef4a0, var = 0x167e6e0, nvars = 140737488334032 } gcpro3 = { next = 0x5, var = 0x7fffffffabe0, nvars = 1 } #46 0x00000000005fc050 in internal_catch (tag=30227906, func=0x5fdd25 <eval_sub>, arg=40798374) at eval.c:1256 ---Type <return> to continue, or q <return> to quit--- c = { tag = 30227906, val = 12741074, next = 0x7fffffffb540, gcpro = 0x0, jmp = {{ __jmpbuf = {140737488335816, -1323075187417016305, 12741074, 30227042, 0, 0, -1323075187377170417, 1323074641464530959}, __mask_was_saved = 0, __saved_mask = { __val = {6289701, 0, 0, 140737488334552, 6, 140737488335664, 140737488334552, 140737488334560, 5, 12741074, 12741074, 140737488334544, 6175427, 12806098, 0, 5} } }}, backlist = 0x7fffffffb330, handlerlist = 0x7fffffffb510, lisp_eval_depth = 1, pdlcount = 6, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x7fffffffaf50 } ---Type <return> to continue, or q <return> to quit--- #47 0x000000000064c0be in exec_byte_code (bytestr=30255249, vector=30289701, maxdepth=48, args_template=2056, nargs=2, args=0x7fffffffb3d8) at bytecode.c:966 v1 = 40798374 count = 6 op = 141 vectorp = 0x1ce2f30 stack = { pc = 0x1c2507d "\207", byte_string = 30255249, byte_string_start = 0x1c25068 "\211C\300\301\302\303\304\305\306\006\t\006\b\"\307\"\310\311%D\215\207", constants = 30289701, next = 0x0 } top = 0x7fffffffaec8 result = 40777526 #48 0x0000000000600178 in funcall_lambda (fun=30290005, nargs=2, arg_vector=0x7fffffffb3c8) at eval.c:3139 val = 1 syms_left = 2056 next = 6597069770240 lexenv = 1116504333322 ---Type <return> to continue, or q <return> to quit--- count = 6 i = 268435456 optional = 0 rest = 12563984 #49 0x00000000005ffc4b in Ffuncall (nargs=3, args=0x7fffffffb3c0) at eval.c:3023 fun = 30290005 original_fun = 30227042 funcar = 140737488335760 numargs = 2 lisp_numargs = 6173970 val = 140737488335808 backtrace = { next = 0x0, function = 0x7fffffffb3c0, args = 0x7fffffffb3c8, nargs = 2, debug_on_exit = 0 } internal_args = 0x7fffffffb3c0 i = 12906096 #50 0x00000000005febe6 in Fapply (nargs=2, args=0x7fffffffb480) at eval.c:2479 i = 3 ---Type <return> to continue, or q <return> to quit--- numargs = 2 spread_arg = 12741074 funcall_args = 0x7fffffffb3c0 fun = 30290005 retval = 4973694 gcpro1 = { next = 0x7fffffffb410, var = 0x589c32, nvars = 3 } sa_count = 6 sa_must_free = 0 #51 0x00000000005ff133 in apply1 (fn=30227042, arg=40798438) at eval.c:2717 ret_ungc_val = 13414437 args = {30227042, 40798438} gcpro1 = { next = 0x4be3f9, var = 0x7fffffffb480, nvars = 2 } #52 0x0000000000656f98 in read_process_output_call (fun_and_args=40798422) at process.c:4967 No locals. ---Type <return> to continue, or q <return> to quit--- #53 0x00000000005fc83d in internal_condition_case_1 ( bfun=0x656f6a <read_process_output_call>, arg=40798422, handlers=12793266, hfun=0x656f9a <read_process_output_error_handler>) at eval.c:1537 val = 12793266 c = { tag = 12741074, val = 12741074, next = 0x7fffffffd590, gcpro = 0x0, jmp = {{ __jmpbuf = {12793266, -1323075186603321329, 67, 30227042, 0, 0, -1323075186555086833, 1323074641215363087}, __mask_was_saved = 0, __saved_mask = { __val = {4300774963, 12741074, 12769125, 12552544, 12769120, 12741074, 43479120, 140737488336400, 12789760, 5807616, 13997941, 12741074, 67, 67, 25776097741, 12741122} } }}, backlist = 0x0, handlerlist = 0x7fffffffd560, lisp_eval_depth = 0, pdlcount = 6, ---Type <return> to continue, or q <return> to quit--- poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 12793266, var = 12741074, chosen_clause = 0, tag = 0x7fffffffb540, next = 0x7fffffffd560 } #54 0x0000000000657632 in read_process_output (proc=43479125, channel=67) at process.c:5167 text = 41193569 outer_running_asynch_code = 0 waiting = -1 nbytes = 67 chars = 0x7fffffffb680 ":0.0 -window-system -file /home/horn/Protokoll-Westerwaldbank.txt \nare/man:/usr/share/man:/usr/share/binutils-data/x86_64-pc-linux-gnu/2.21.1/man:/usr/share/gcc-data/x86_64-pc-linux-gnu/4.5.3/man:/etc"... outstream = 30227042 p = 0xc335b2 opoint = 30227042 ---Type <return> to continue, or q <return> to quit--- coding = 0x15a7400 carryover = 0 readmax = 4096 count = 3 odeactivate = 12741074 #55 0x00000000006568d6 in wait_reading_process_output (time_limit=30, microsecs=0, read_kbd=-1, do_display=1, wait_for_cell=12741074, wait_proc=0x0, just_wait_proc=0) at process.c:4804 nread = 0 timeout_reduced_for_timers = 1 channel = 20 nfds = 1 Available = { fds_bits = {1048576, 0 <repeats 15 times>} } Writeok = { fds_bits = {0 <repeats 16 times>} } check_write = 1 check_delay = 1 no_avail = 0 xerrno = 11 proc = 43479125 ---Type <return> to continue, or q <return> to quit--- timeout = { tv_sec = 0, tv_usec = 59875 } end_time = { tv_sec = 1318401682, tv_usec = 489297 } wait_channel = -1 got_some_input = 1 count = 2 #56 0x0000000000423225 in sit_for (timeout=120, reading=1, do_display=1) at dispnew.c:5971 sec = 30 usec = 0 #57 0x0000000000565f2c in read_char (commandflag=1, nmaps=9, maps=0x7fffffffcf40, prev_event=12741074, used_mouse_menu=0x7fffffffd164, end_time=0x0) at keyboard.c:2687 tem0 = 0 timeout = 30 delay_level = 4 buffer_size = 1 c = 12741074 ---Type <return> to continue, or q <return> to quit--- jmpcount = 2 local_getcjmp = {{ __jmpbuf = {9, -1323075188503341041, 4286720, 140737488346352, 0, 0, -1323075188387997681, 1323074723291076623}, __mask_was_saved = 0, __saved_mask = { __val = {780, 140737488342800, 6208925, 0, 0, 0, 0, 0, 12769120, 0, 12775154, 140737488342544, 6737913, 0, 5, 8589934627} } }} save_jump = {{ __jmpbuf = {0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved = 0, __saved_mask = { __val = {0 <repeats 16 times>} } }} key_already_recorded = 0 tem = 5754146 save = 140737488343400 previous_echo_area_message = 12741074 also_record = 12741074 reread = 0 ---Type <return> to continue, or q <return> to quit--- gcpro1 = { next = 0x7fffffffcc10, var = 0x66cdb7, nvars = 140737488342064 } gcpro2 = { next = 0xffffcbe0, var = 0x7fffffffcc38, nvars = 12741074 } polling_stopped_here = 0 orig_kboard = 0x1091c00 #58 0x0000000000572e19 in read_key_sequence (keybuf=0x7fffffffd3d0, bufsize=30, prompt=12741074, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9282 interrupted_kboard = 0x1091c00 interrupted_frame = 0x1452e00 key = 12769125 used_mouse_menu = 0 echo_local_start = 0 last_real_key_start = 0 keys_local_start = 0 local_first_binding = 0 ---Type <return> to continue, or q <return> to quit--- from_string = 12741074 count = 2 t = 0 echo_start = 0 keys_start = 0 nmaps = 9 nmaps_allocated = 9 defs = 0x7fffffffcee0 submaps = 0x7fffffffcf40 orig_local_map = 15860886 orig_keymap = 12741074 localized_local_map = 0 first_binding = 0 first_unbound = 31 mock_input = 0 fkey = { parent = 18142822, map = 18142822, start = 0, end = 0 } keytran = { parent = 12720550, ---Type <return> to continue, or q <return> to quit--- map = 12720550, start = 0, end = 0 } indec = { parent = 18142806, map = 18142806, start = 0, end = 0 } shift_translated = 0 delayed_switch_frame = 12741074 original_uppercase = 196 original_uppercase_position = -1 dummyflag = 0 starting_buffer = 0xc2d760 fake_prefixed_keys = 12741074 outer_gcpro1 = { next = 0x7fffffffd1a0, var = 0x5e3512, nvars = 21268741 } #59 0x0000000000563692 in command_loop_1 () at keyboard.c:1447 ---Type <return> to continue, or q <return> to quit--- cmd = 14035666 keybuf = {536871144, 212, 192, 6174127, 140737488344160, 12741074, 276967387, 1, 140737488344160, 6176458, 12741074, 12863618, 140737488344240, 6175427, 12578912, 8589923456, 0, 12863616, 140737488344320, 6294545, 12985638, 8589934593, 12863618, 12741074, 0, 0, 4286720, 140737488346352, 140737488344320, 6293965} i = 1 prev_modiff = 15 prev_buffer = 0xc2d760 already_adjusted = 0 #60 0x00000000005fc6c4 in internal_condition_case ( bfun=0x5632a9 <command_loop_1>, handlers=12793266, hfun=0x562b99 <cmd_error>) at eval.c:1499 val = 0 c = { tag = 12741074, val = 12741074, next = 0x7fffffffd710, gcpro = 0x0, jmp = {{ __jmpbuf = {1, -1323075187687548913, 4286720, 140737488346352, 0, 0, -1323075187647703025, 1323074641263728655}, __mask_was_saved = 0, ---Type <return> to continue, or q <return> to quit--- __saved_mask = { __val = {1323074641263728655, 0, 4294967295, 5696316, 1, 9343624, 0, 0, 0, 0, 140737351956354, 1, 0, 1, 140737257473672, 0} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 12793266, var = 12741074, chosen_clause = 12793266, tag = 0x7fffffffd590, next = 0x0 } #61 0x0000000000562f99 in command_loop_2 (ignore=12741074) at keyboard.c:1158 val = 1 ---Type <return> to continue, or q <return> to quit--- #62 0x00000000005fc050 in internal_catch (tag=12789058, func=0x562f73 <command_loop_2>, arg=12741074) at eval.c:1256 c = { tag = 12789058, val = 12741074, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {1, -1323075187735783409, 4286720, 140737488346352, 0, 0, -1323075187695937521, 1323074641464530959}, __mask_was_saved = 0, __saved_mask = { __val = {6175427, 112, 4301654456, 140737261113048, 12741074, 12134176, 12769120, 14, 1, 140737488345072, 12968192, 140737488345136, 12741074, 4286720, 140737488346352, 140737488345152} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, ---Type <return> to continue, or q <return> to quit--- interrupt_input_blocked = 0, byte_stack = 0x0 } #63 0x0000000000562f4c in command_loop () at keyboard.c:1137 No locals. #64 0x00000000005626df in recursive_edit_1 () at keyboard.c:757 count = 1 val = 12741074 #65 0x0000000000562881 in Frecursive_edit () at keyboard.c:821 count = 0 buffer = 12741074 #66 0x00000000005609f5 in main (argc=1, argv=0x7fffffffdcf8) at emacs.c:1706 dummy = 140737353901264 stack_bottom_variable = 0 '\000' do_initial_setlocale = 1 skip_args = 0 rlim = { rlim_cur = 8720000, rlim_max = 18446744073709551615 } no_loadup = 0 junk = 0x0 dname_arg = 0x0 ---Type <return> to continue, or q <return> to quit--- ch_to_dir = 0x7ffff7fbfea0 "@\344\377\367\377\177" Lisp Backtrace: "x-create-frame" (0xffff8a68) "x-create-frame-with-faces" (0xffff8f38) "make-frame" (0xffff9418) "make-frame-on-display" (0xffff9928) "server-create-window-system-frame" (0xffff9e90) 0x2746af0 PVEC_COMPILED "funcall" (0xffffa3c0) 0x167e6e0 PVEC_COMPILED "funcall" (0xffffabe0) "server-process-filter" (0xffffb3c8) (gdb) --8<---------------cut here---------------end--------------->8--- Bye, Tassilo ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-12 6:49 ` Tassilo Horn @ 2011-10-12 12:57 ` Stefan Monnier 2011-11-17 10:10 ` Tassilo Horn 0 siblings, 1 reply; 39+ messages in thread From: Stefan Monnier @ 2011-10-12 12:57 UTC (permalink / raw) To: Tassilo Horn Cc: Chong Yidong, emacs-devel, schwab, James Cloos, Eli Zaretskii, Jan D., Ulrich Mueller > I commente 3 lines as indicated below: > --8<---------------cut here---------------start------------->8--- > /* If needed, delete the terminal that this frame was on. > (This must be done after the frame is killed.) */ > terminal->reference_count--; > if (terminal->reference_count == 0) > { > // Lisp_Object tmp; > // XSETTERMINAL (tmp, terminal); > kb = NULL; > // Fdelete_terminal (tmp, NILP (force) ? Qt : force); > } > else > kb = terminal->kboard; > --8<---------------cut here---------------end--------------->8--- > I'm not sure if keeping the "kb = NULL;" was correct, though. If you > want, I can try again with the complete then block commented. I'd suggest to only comment out the "terminal->reference_count--;". Stefan ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-12 12:57 ` Stefan Monnier @ 2011-11-17 10:10 ` Tassilo Horn 2011-11-17 11:18 ` Chong Yidong 2011-11-18 2:05 ` Stefan Monnier 0 siblings, 2 replies; 39+ messages in thread From: Tassilo Horn @ 2011-11-17 10:10 UTC (permalink / raw) To: Stefan Monnier Cc: Chong Yidong, emacs-devel, schwab, James Cloos, Eli Zaretskii, Jan D., Ulrich Mueller Stefan Monnier <monnier@iro.umontreal.ca> writes: Hi Stefan, >> I commente 3 lines as indicated below: > >> --8<---------------cut here---------------start------------->8--- >> /* If needed, delete the terminal that this frame was on. >> (This must be done after the frame is killed.) */ >> terminal->reference_count--; >> if (terminal->reference_count == 0) >> { >> // Lisp_Object tmp; >> // XSETTERMINAL (tmp, terminal); > >> kb = NULL; >> // Fdelete_terminal (tmp, NILP (force) ? Qt : force); >> } >> else >> kb = terminal->kboard; >> --8<---------------cut here---------------end--------------->8--- > >> I'm not sure if keeping the "kb = NULL;" was correct, though. If you >> want, I can try again with the complete then block commented. > > I'd suggest to only comment out the "terminal->reference_count--;". I did that by using the patch below for about one month. Since then, the crashes I had are gone, and working with multiple emacs X frames is fun again. Should I go ahead and commit? --8<---------------cut here---------------start------------->8--- === modified file 'src/frame.c' --- src/frame.c 2011-11-17 09:09:20 +0000 +++ src/frame.c 2011-11-17 10:05:11 +0000 @@ -1358,7 +1358,11 @@ /* If needed, delete the terminal that this frame was on. (This must be done after the frame is killed.) */ - terminal->reference_count--; + + // FIXME: Deleting the terminal crashes emacs because of a GTK + // bug. See the thread starting with <87d3flnxoo.fsf@thinkpad.tsdh.de> + // on emacs-devel. + // terminal->reference_count--; if (terminal->reference_count == 0) { Lisp_Object tmp; --8<---------------cut here---------------end--------------->8--- Bye, Tassilo -- (What the world needs (I think) is not (a Lisp (with fewer parentheses)) but (an English (with more.))) Brian Hayes, http://tinyurl.com/3y9l2kf ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-17 10:10 ` Tassilo Horn @ 2011-11-17 11:18 ` Chong Yidong 2011-11-17 13:45 ` Tassilo Horn 2011-11-18 2:05 ` Stefan Monnier 1 sibling, 1 reply; 39+ messages in thread From: Chong Yidong @ 2011-11-17 11:18 UTC (permalink / raw) To: Tassilo Horn Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, James Cloos, Eli Zaretskii, Jan D. Tassilo Horn <tassilo@member.fsf.org> writes: > I did that by using the patch below for about one month. Since then, > the crashes I had are gone, and working with multiple emacs X frames is > fun again. Should I go ahead and commit? Fine by me, but the code should probably be something like #ifdef USE_GTK /* ... (Use C-style not C++ style comments) ... */ if (terminal->type != output_x_window) #endif terminal->reference_count--; ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-17 11:18 ` Chong Yidong @ 2011-11-17 13:45 ` Tassilo Horn 2011-11-17 16:34 ` Paul Eggert 0 siblings, 1 reply; 39+ messages in thread From: Tassilo Horn @ 2011-11-17 13:45 UTC (permalink / raw) To: Chong Yidong Cc: Ulrich Mueller, emacs-devel, schwab, Stefan Monnier, James Cloos, Eli Zaretskii, Jan D. Chong Yidong <cyd@gnu.org> writes: >> I did that by using the patch below for about one month. Since then, >> the crashes I had are gone, and working with multiple emacs X frames >> is fun again. Should I go ahead and commit? > > Fine by me, but the code should probably be something like > > #ifdef USE_GTK > /* ... (Use C-style not C++ style comments) ... */ > if (terminal->type != output_x_window) > #endif > terminal->reference_count--; So the one below is fine, right? What about the indentation of the line after the #endif? Emacs' <tab> wants it to be correct in the USE_GTK case, while you have it correct in the other case. --8<---------------cut here---------------start------------->8--- === modified file 'src/frame.c' --- src/frame.c 2011-11-17 09:09:20 +0000 +++ src/frame.c 2011-11-17 13:40:27 +0000 @@ -1358,7 +1358,14 @@ /* If needed, delete the terminal that this frame was on. (This must be done after the frame is killed.) */ - terminal->reference_count--; + +#ifdef USE_GTK + /* FIXME: Deleting the terminal crashes emacs because of a GTK + bug. See the thread starting with + <87d3flnxoo.fsf@thinkpad.tsdh.de> on emacs-devel. */ + if (terminal->type != output_x_window) +#endif /* USE_GTK */ + terminal->reference_count--; if (terminal->reference_count == 0) { Lisp_Object tmp; --8<---------------cut here---------------end--------------->8--- Bye, Tassilo -- (What the world needs (I think) is not (a Lisp (with fewer parentheses)) but (an English (with more.))) Brian Hayes, http://tinyurl.com/3y9l2kf ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-17 13:45 ` Tassilo Horn @ 2011-11-17 16:34 ` Paul Eggert 2011-11-17 16:58 ` Tassilo Horn 2011-11-18 2:41 ` Chong Yidong 0 siblings, 2 replies; 39+ messages in thread From: Paul Eggert @ 2011-11-17 16:34 UTC (permalink / raw) To: Tassilo Horn; +Cc: emacs-devel On 11/17/11 05:45, Tassilo Horn wrote: > +#ifdef USE_GTK > + /* FIXME: Deleting the terminal crashes emacs because of a GTK > + bug. See the thread starting with > + <87d3flnxoo.fsf@thinkpad.tsdh.de> on emacs-devel. */ > + if (terminal->type != output_x_window) > +#endif /* USE_GTK */ > + terminal->reference_count--; Could you please use a URL rather than a Message-ID? The latter is hard for a random reader to follow. Perhaps the URL <http://lists.gnu.org/archive/html/emacs-devel/2011-10/msg00363.html> is what is meant? (Sorry, I can't easily tell.) Also, this code would be easier to read: if (! (use_gtk && terminal->type == output_x_window)) terminal->reference_count--; with something like this near the start of the file: #ifdef USE_GTK enum { use_gtk = 1 }; #else enum { use_gtk = 0 }; #endif ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-17 16:34 ` Paul Eggert @ 2011-11-17 16:58 ` Tassilo Horn 2011-11-18 2:41 ` Chong Yidong 1 sibling, 0 replies; 39+ messages in thread From: Tassilo Horn @ 2011-11-17 16:58 UTC (permalink / raw) To: Paul Eggert; +Cc: emacs-devel Paul Eggert <eggert@cs.ucla.edu> writes: Hi Paul, > On 11/17/11 05:45, Tassilo Horn wrote: >> +#ifdef USE_GTK >> + /* FIXME: Deleting the terminal crashes emacs because of a GTK >> + bug. See the thread starting with >> + <87d3flnxoo.fsf@thinkpad.tsdh.de> on emacs-devel. */ >> + if (terminal->type != output_x_window) >> +#endif /* USE_GTK */ >> + terminal->reference_count--; > > Could you please use a URL rather than a Message-ID? The latter is > hard for a random reader to follow. Perhaps the URL > <http://lists.gnu.org/archive/html/emacs-devel/2011-10/msg00363.html> > is what is meant? (Sorry, I can't easily tell.) Yes, the Message-ID was the top-level message of that thread, but the link you cite is actually where the important information drops in. > Also, this code would be easier to read: > > if (! (use_gtk && terminal->type == output_x_window)) > terminal->reference_count--; > > with something like this near the start of the file: > > #ifdef USE_GTK > enum { use_gtk = 1 }; > #else > enum { use_gtk = 0 }; > #endif In my opinion, it's better to keep temporary workarounds for buggy external libs as local as possible. But I don't really care, as long as it fixes the crashes. Bye, Tassilo -- (What the world needs (I think) is not (a Lisp (with fewer parentheses)) but (an English (with more.))) Brian Hayes, http://tinyurl.com/3y9l2kf ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-17 16:34 ` Paul Eggert 2011-11-17 16:58 ` Tassilo Horn @ 2011-11-18 2:41 ` Chong Yidong 1 sibling, 0 replies; 39+ messages in thread From: Chong Yidong @ 2011-11-18 2:41 UTC (permalink / raw) To: Paul Eggert; +Cc: Tassilo Horn, emacs-devel Paul Eggert <eggert@cs.ucla.edu> writes: > Also, this code would be easier to read: > > if (! (use_gtk && terminal->type == output_x_window)) > terminal->reference_count--; > > with something like this near the start of the file: > > #ifdef USE_GTK > enum { use_gtk = 1 }; > #else > enum { use_gtk = 0 }; > #endif We don't follow this practice elsewhere in Emacs; let's not start now. ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-17 10:10 ` Tassilo Horn 2011-11-17 11:18 ` Chong Yidong @ 2011-11-18 2:05 ` Stefan Monnier 2011-11-18 9:38 ` Tassilo Horn 1 sibling, 1 reply; 39+ messages in thread From: Stefan Monnier @ 2011-11-18 2:05 UTC (permalink / raw) To: Tassilo Horn Cc: Chong Yidong, emacs-devel, schwab, James Cloos, Eli Zaretskii, Jan D., Ulrich Mueller > I did that by using the patch below for about one month. Since then, > the crashes I had are gone, and working with multiple emacs X frames is > fun again. Should I go ahead and commit? Good news, thanks. > --8<---------------cut here---------------start------------->8--- > === modified file 'src/frame.c' > --- src/frame.c 2011-11-17 09:09:20 +0000 > +++ src/frame.c 2011-11-17 10:05:11 +0000 > @@ -1358,7 +1358,11 @@ > /* If needed, delete the terminal that this frame was on. > (This must be done after the frame is killed.) */ > - terminal->reference_count--; > + > + // FIXME: Deleting the terminal crashes emacs because of a GTK > + // bug. See the thread starting with <87d3flnxoo.fsf@thinkpad.tsdh.de> > + // on emacs-devel. > + // terminal->reference_count--; > if (terminal->reference_count == 0) > { > Lisp_Object tmp; > --8<---------------cut here---------------end--------------->8--- To avoid the risk of reaching 0 via wrap-around (yes, I know that creating a billion frames in the life of a single session is unlikely, but still), you could do: /* If needed, delete the terminal that this frame was on. (This must be done after the frame is killed.) */ terminal->reference_count--; #ifdef USE_GTK /* ... (Use C-style not C++ style comments) ... */ if (terminal->reference_count == 0 && terminal->type == output_x_window) terminal->reference_count = 1; #endif if (terminal->reference_count == 0) { Lisp_Object tmp; Alternatively you could get the same result by changing the code that initializes terminal->reference_count so that it starts at 1 rather than at 0. Stefan ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-18 2:05 ` Stefan Monnier @ 2011-11-18 9:38 ` Tassilo Horn 2012-01-20 23:29 ` andres.ramirez 2012-01-20 23:29 ` andres.ramirez 0 siblings, 2 replies; 39+ messages in thread From: Tassilo Horn @ 2011-11-18 9:38 UTC (permalink / raw) To: Stefan Monnier Cc: Chong Yidong, emacs-devel, schwab, James Cloos, Eli Zaretskii, Jan D., Ulrich Mueller Stefan Monnier <monnier@iro.umontreal.ca> writes: Hi Stefan, > To avoid the risk of reaching 0 via wrap-around (yes, I know that > creating a billion frames in the life of a single session is unlikely, > but still), you could do: > > /* If needed, delete the terminal that this frame was on. > (This must be done after the frame is killed.) */ > terminal->reference_count--; > #ifdef USE_GTK > /* ... (Use C-style not C++ style comments) ... */ > if (terminal->reference_count == 0 && terminal->type == output_x_window) > terminal->reference_count = 1; > #endif > if (terminal->reference_count == 0) > { > Lisp_Object tmp; I liked this version best and it's committed now. Bye, Tassilo -- (What the world needs (I think) is not (a Lisp (with fewer parentheses)) but (an English (with more.))) Brian Hayes, http://tinyurl.com/3y9l2kf ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-18 9:38 ` Tassilo Horn @ 2012-01-20 23:29 ` andres.ramirez 2012-01-21 0:34 ` Glenn Morris 2012-01-20 23:29 ` andres.ramirez 1 sibling, 1 reply; 39+ messages in thread From: andres.ramirez @ 2012-01-20 23:29 UTC (permalink / raw) To: Tassilo Horn Cc: Chong Yidong, emacs-devel, schwab, Stefan Monnier, James Cloos, Eli Zaretskii, Jan D., Ulrich Mueller Hi. I have revno 106895. And this problem still persist. emacs is configured as follows: In GNU Emacs 24.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.2.3) of 2012-01-20 on wari Windowing system distributor `The X.Org Foundation', version 11.0.11103000 configured using `configure '--prefix=/usr' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=/usr/lib' '--mandir=/usr/share/man/emacs-24' '--without-sound' '--program-suffix=-emacs-24' '--infodir=/usr/share/info/emacs-24' '--with-x-toolkit=gtk3' 'CFLAGS=-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu'' Regards At Fri, 18 Nov 2011 10:38:39 +0100, Tassilo Horn wrote: > > Stefan Monnier <monnier@iro.umontreal.ca> writes: > > Hi Stefan, > > > To avoid the risk of reaching 0 via wrap-around (yes, I know that > > creating a billion frames in the life of a single session is unlikely, > > but still), you could do: > > > > /* If needed, delete the terminal that this frame was on. > > (This must be done after the frame is killed.) */ > > terminal->reference_count--; > > #ifdef USE_GTK > > /* ... (Use C-style not C++ style comments) ... */ > > if (terminal->reference_count == 0 && terminal->type == output_x_window) > > terminal->reference_count = 1; > > #endif > > if (terminal->reference_count == 0) > > { > > Lisp_Object tmp; > > I liked this version best and it's committed now. > > Bye, > Tassilo > -- > (What the world needs (I think) is not > (a Lisp (with fewer parentheses)) > but (an English (with more.))) > Brian Hayes, http://tinyurl.com/3y9l2kf > > ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2012-01-20 23:29 ` andres.ramirez @ 2012-01-21 0:34 ` Glenn Morris 2012-01-21 8:02 ` andres.ramirez 0 siblings, 1 reply; 39+ messages in thread From: Glenn Morris @ 2012-01-21 0:34 UTC (permalink / raw) To: andres.ramirez; +Cc: emacs-devel andres.ramirez wrote: > I have revno 106895. And this problem still persist. > > emacs is configured as follows: > In GNU Emacs 24.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.2.3) > of 2012-01-20 on wari If you have that revision, why is your version number not 24.0.92? ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2012-01-21 0:34 ` Glenn Morris @ 2012-01-21 8:02 ` andres.ramirez 0 siblings, 0 replies; 39+ messages in thread From: andres.ramirez @ 2012-01-21 8:02 UTC (permalink / raw) To: Glenn Morris; +Cc: andres.ramirez, emacs-devel Hi Glenn. the problem was my emacs-build directory, after removing it I got In GNU Emacs 24.0.92.1 (i686-pc-linux-gnu, GTK+ Version 3.2.3) of 2012-01-20 on wari Windowing system distributor `The X.Org Foundation', version 11.0.11103000 configured using `configure '--prefix=/usr' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=/usr/lib' '--mandir=/usr/share/man/emacs-24' '--without-sound' '--program-suffix=-emacs-24' '--infodir=/usr/share/info/emacs-24' '--with-x-toolkit=gtk3' 'CFLAGS=-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu'' And also the problem is GONE, sorry for bothering Regards At Fri, 20 Jan 2012 19:34:02 -0500, Glenn Morris wrote: > > andres.ramirez wrote: > > > I have revno 106895. And this problem still persist. > > > > emacs is configured as follows: > > In GNU Emacs 24.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.2.3) > > of 2012-01-20 on wari > > If you have that revision, why is your version number not 24.0.92? > > ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-11-18 9:38 ` Tassilo Horn 2012-01-20 23:29 ` andres.ramirez @ 2012-01-20 23:29 ` andres.ramirez 1 sibling, 0 replies; 39+ messages in thread From: andres.ramirez @ 2012-01-20 23:29 UTC (permalink / raw) To: Tassilo Horn Cc: Chong Yidong, emacs-devel, schwab, Stefan Monnier, James Cloos, Eli Zaretskii, Jan D., Ulrich Mueller Hi. I have revno 106895. And this problem still persist. emacs is configured as follows: In GNU Emacs 24.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.2.3) of 2012-01-20 on wari Windowing system distributor `The X.Org Foundation', version 11.0.11103000 configured using `configure '--prefix=/usr' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=/usr/lib' '--mandir=/usr/share/man/emacs-24' '--without-sound' '--program-suffix=-emacs-24' '--infodir=/usr/share/info/emacs-24' '--with-x-toolkit=gtk3' 'CFLAGS=-march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu'' Regards At Fri, 18 Nov 2011 10:38:39 +0100, Tassilo Horn wrote: > > Stefan Monnier <monnier@iro.umontreal.ca> writes: > > Hi Stefan, > > > To avoid the risk of reaching 0 via wrap-around (yes, I know that > > creating a billion frames in the life of a single session is unlikely, > > but still), you could do: > > > > /* If needed, delete the terminal that this frame was on. > > (This must be done after the frame is killed.) */ > > terminal->reference_count--; > > #ifdef USE_GTK > > /* ... (Use C-style not C++ style comments) ... */ > > if (terminal->reference_count == 0 && terminal->type == output_x_window) > > terminal->reference_count = 1; > > #endif > > if (terminal->reference_count == 0) > > { > > Lisp_Object tmp; > > I liked this version best and it's committed now. > > Bye, > Tassilo > -- > (What the world needs (I think) is not > (a Lisp (with fewer parentheses)) > but (an English (with more.))) > Brian Hayes, http://tinyurl.com/3y9l2kf > > ^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: Killing a frame sometimes kills emacs 2011-10-11 6:46 ` Tassilo Horn 2011-10-11 12:53 ` Stefan Monnier @ 2011-10-11 17:56 ` Jan Djärv 1 sibling, 0 replies; 39+ messages in thread From: Jan Djärv @ 2011-10-11 17:56 UTC (permalink / raw) To: Tassilo Horn; +Cc: Eli Zaretskii, schwab, emacs-devel Tassilo Horn skrev 2011-10-11 08:46: > For me and I guess for most users, localhost:0, unix:0 (*), :0.0, and :0 > are all the same in practice, only localhost:1 or :2 actually mean other > displays. So I'd simply strip localhost and unix before the colon and > dot-zeros. (Maybe there should be an option for that, or some lisp > function that would be called to transform the display name if it is > defined...) > It is probably better to use some heruistics to see if two displays are really the same. If the root window id and the default visual id are the same, they probably are the same display. You can throw in protocol version, vendor string, screen dimension checks also. Jan D. ^ permalink raw reply [flat|nested] 39+ messages in thread
end of thread, other threads:[~2012-01-21 8:02 UTC | newest] Thread overview: 39+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-08-31 20:16 Killing a frame sometimes kills emacs Tassilo Horn 2011-08-31 20:51 ` joakim 2011-08-31 23:06 ` chad 2011-09-01 2:53 ` Eli Zaretskii 2011-09-01 7:04 ` Tassilo Horn 2011-09-01 10:09 ` Tassilo Horn 2011-09-01 10:27 ` Eli Zaretskii 2011-09-01 10:42 ` Tassilo Horn 2011-09-01 10:56 ` Eli Zaretskii 2011-09-01 11:09 ` Tassilo Horn 2011-09-01 10:33 ` Andreas Schwab 2011-09-01 10:45 ` Tassilo Horn 2011-09-01 12:47 ` Jan D. 2011-09-01 13:05 ` Tassilo Horn 2011-09-01 15:29 ` Eli Zaretskii 2011-09-01 19:30 ` Ken Raeburn 2011-09-02 15:02 ` Andreas Schwab 2011-10-11 6:46 ` Tassilo Horn 2011-10-11 12:53 ` Stefan Monnier 2011-10-11 14:53 ` Tassilo Horn 2011-10-11 17:38 ` James Cloos 2011-10-11 19:17 ` Tassilo Horn 2011-10-11 19:49 ` Tassilo Horn 2011-10-12 2:04 ` Chong Yidong 2011-10-12 6:49 ` Tassilo Horn 2011-10-12 12:57 ` Stefan Monnier 2011-11-17 10:10 ` Tassilo Horn 2011-11-17 11:18 ` Chong Yidong 2011-11-17 13:45 ` Tassilo Horn 2011-11-17 16:34 ` Paul Eggert 2011-11-17 16:58 ` Tassilo Horn 2011-11-18 2:41 ` Chong Yidong 2011-11-18 2:05 ` Stefan Monnier 2011-11-18 9:38 ` Tassilo Horn 2012-01-20 23:29 ` andres.ramirez 2012-01-21 0:34 ` Glenn Morris 2012-01-21 8:02 ` andres.ramirez 2012-01-20 23:29 ` andres.ramirez 2011-10-11 17:56 ` Jan Djärv
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.