Subject: bug#21380: 25.0.50; GTK-induced segfault when scheduling timer from window-configuration-change-hook

From: Eli Zaretskii <[email-masked]>
Date: Sun, 30 Aug 2015 18:01:37 +0300

> Date: Sun, 30 Aug 2015 12:51:26 +0000
> From: Pip Cet <[email-masked]>
> 
> It appears it's unsafe to schedule an immediate timer in
> window-configuration-change-hook:
> 
> (add-hook 'window-configuration-change-hook (lambda () (run-with-timer
> 0 nil 'exwm-layout--refresh)))
> 
> I saw the following segfault:
> #0 0x0000000000547ec0 in XSETCAR (c=0, n=51872517) at lisp.h:1188
> #1 0x00000000005efdb3 in concat (nargs=1, args=0x7fffffffd868,
> target_type=Lisp_Cons, last_special=false) at fns.c:747
> #2 0x00000000005ef0f3 in Fcopy_sequence (arg=53371635) at fns.c:510
> #3 0x0000000000557252 in timer_check () at keyboard.c:4569
> #4 0x0000000000639f1b in wait_reading_process_output (time_limit=30, nsecs=0,
> read_kbd=-1, do_display=true, wait_for_cell=0, wait_proc=0x0, just_wait_proc=0)
> at process.c:4611
> #5 0x00000000004233b2 in sit_for (timeout=122, reading=true, display_option=1)
> at dispnew.c:5756
> #6 0x0000000000553942 in read_char (commandflag=1, map=53372867, prev_event=0,
> used_mouse_menu=0x7fffffffe06f, end_time=0x0) at keyboard.c:2775
> #7 0x00000000005602ef in read_key_sequence (keybuf=0x7fffffffe220, bufsize=30,
> prompt=0, dont_downcase_last=false, can_return_switch_frame=true,
> fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9139
> #8 0x00000000005507b1 in command_loop_1 () at keyboard.c:1406
> #9 0x00000000005e77e4 in internal_condition_case (bfun=0x550386
> <command_loop_1>, handlers=18912, hfun=0x54fb70 <cmd_error>) at eval.c:1293
> #10 0x000000000055008d in command_loop_2 (ignore=0) at keyboard.c:1138
> #11 0x00000000005e6fa6 in internal_catch (tag=45264, func=0x550064
> <command_loop_2>, arg=0) at eval.c:1057
> #12 0x000000000055002f in command_loop () at keyboard.c:1117
> #13 0x000000000054f738 in recursive_edit_1 () at keyboard.c:723
> #14 0x000000000054f8cc in Frecursive_edit () at keyboard.c:794
> #15 0x000000000054d706 in main (argc=5, argv=0x7fffffffe6a8) at emacs.c:1643
> 
> Somehow, the argument to Fcopy_sequence was changed while concat was
> underway.

How do you see that?

> Further investigation indicates that
> window-configuration-change-hook was called in the middle of concat:

Did you understand how this fact is related to the segfault?

Thanks.