[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#941125: xfce4-terminal: Multiple open windows; closing one by button; bash zombie



Dear Maintainer,
I tried to have a look at this issue and could reproduce
it in a buster amd64 qemu VM.
But this is also observable with current Bullseye/testing.

This seems to be based on the fact that all xfce4-terminal
windows are owned by the same parent process.

I could observe if a second terminal window is closed by the
"X" in the window decoration then the xfce4-terminal process
does not receive a SIGCHLD for the bash process running inside
that window.
Therefore dispatch_unix_signals/waitpid is not executed which
causes the defunct process.

Further I think the issue lies inside libutempter0 which
is forking off a helper program and therefore temporarily
changes signal handling for SIGCHLD to SIG_DFL, and
therefore the signal seems to be lost. [1]

Attached patch tries to receive all SIGCHLD signals and
resend the unexpected ones after the original
signal handler is active again.
But it operates on a single static variable,
is therefore not thread safe, if it needs to be?

Kind regards,
Bernhard

[1] http://git.altlinux.org/people/ldv/packages/?p=libutempter.git;a=blob;f=libutempter/iface.c;hb=HEAD#l84
# Buster amd64 qemu VM 2020-08-22


apt update
apt dist-upgrade


apt install systemd-coredump xfce4 xterm xfce4-terminal psmisc mc colordiff fakeroot quilt git python3-pexpect gdb xfce4-terminal-dbgsym libvte-2.91-0-dbgsym libglib2.0-0-dbgsym libutempter0-dbgsym
apt build-dep xfce4-terminal
apt build-dep rr


reboot
echo 1 > /proc/sys/kernel/perf_event_paranoid



mkdir /home/benutzer/source/xfce4-terminal/orig -p
cd    /home/benutzer/source/xfce4-terminal/orig
apt source xfce4-terminal
cd

mkdir /home/benutzer/source/libvte-2.91-0/orig -p
cd    /home/benutzer/source/libvte-2.91-0/orig
apt source libvte-2.91-0
cd

mkdir /home/benutzer/source/libglib2.0-0/orig -p
cd    /home/benutzer/source/libglib2.0-0/orig
apt source libglib2.0-0
cd

mkdir /home/benutzer/source/libutempter0/orig -p
cd    /home/benutzer/source/libutempter0/orig
apt source libutempter0
cd

mkdir /home/benutzer/source/rr/git -p
cd    /home/benutzer/source/rr/git
git clone https://github.com/mozilla/rr.git
cd

cd /home/benutzer/source/rr/git/
mkdir obj && cd obj
cmake ../rr
make -j4


#########


export DISPLAY=:0
export SESSION_MANAGER=$(cat /proc/647/environ | tr '\0' '\12' | grep SESSION_MANAGER | sed 's/SESSION_MANAGER=//g')


/home/benutzer/source/rr/git/obj/bin/rr /usr/bin/xfce4-terminal


# Started one terminal

        benutzer@debian:~$ pstree -p | grep xfce4-terminal -A3
                |           |-sshd(29466)---sshd(29472)---bash(29473)---rr(29618)-+-xfce4-terminal(29626)-+-bash(29630)
                |           |                                                     |                       |-{xfce4-terminal}(29627)
                |           |                                                     |                       `-{xfce4-terminal}(29628)


# Started second terminal window with one tab

        benutzer@debian:~$ pstree -p | grep xfce4-terminal -A3
                |           |-sshd(29466)---sshd(29472)---bash(29473)---rr(29618)-+-xfce4-terminal(29626)-+-bash(29630)
                |           |                                                     |                       |-bash(29653)
                |           |                                                     |                       |-{xfce4-terminal}(29627)
                |           |                                                     |                       |-{xfce4-terminal}(29628)
                |           |                                                     |                       `-{xfce4-terminal}(29652)


# enter 'exit' in the second window

        benutzer@debian:~$ ps aux | grep defunct | grep -v "grep defunct"
        benutzer@debian:~$ 

        -> does not show the problem


# Started third terminal window with one tab

        benutzer@debian:~$ pstree -p | grep xfce4-terminal -A3
                |           |-sshd(29466)---sshd(29472)---bash(29473)---rr(29618)-+-xfce4-terminal(29626)-+-bash(29630)
                |           |                                                     |                       |-bash(29671)
                |           |                                                     |                       |-{xfce4-terminal}(29627)
                |           |                                                     |                       |-{xfce4-terminal}(29628)
                |           |                                                     |                       `-{xfce4-terminal}(29670)


# exit by pressing X in the window decoration

        benutzer@debian:~$ ps aux | grep defunct | grep -v "grep defunct"
        benutzer 29671  0.0  0.0      0     0 ?        Zs   16:49   0:00 [bash] <defunct>

        benutzer@debian:~$ pstree -p | grep xfce4-terminal -A3
                |           |-sshd(29466)---sshd(29472)---bash(29473)---rr(29618)-+-xfce4-terminal(29626)-+-bash(29630)
                |           |                                                     |                       |-bash(29671)
                |           |                                                     |                       |-{xfce4-terminal}(29627)
                |           |                                                     |                       `-{xfce4-terminal}(29628)

        -> here is the issue visible


# enter 'exit' in the first window


# Recording ended:
        rr: Saving execution to trace directory `/home/benutzer/.local/share/rr/xfce4-terminal-2'.

        
################


benutzer@debian:~$ /home/benutzer/source/rr/git/obj/bin/rr ps /home/benutzer/.local/share/rr/xfce4-terminal-2
PID     PPID    EXIT    CMD
29626   --      0       /usr/bin/xfce4-terminal
29630   29626   0       bash
29633   29630   0       dircolors -b
29653   29626   0       bash
29656   29653   0       dircolors -b
29671   29626   -1      bash
29674   29671   0       dircolors -b
29679   29626   1       /usr/lib/x86_64-linux-gnu/utempter/utempter del


##############


/home/benutzer/source/rr/git/obj/bin/rr replay -p 29630 /home/benutzer/.local/share/rr/xfce4-terminal-2
        ...
        0x00007f79019e4090 in _start () from /lib64/ld-linux-x86-64.so.2
        (rr) when
        Current event: 3684
        (rr) cont
        Continuing.

        Program received signal SIGKILL, Killed.
        0x0000000070000002 in ?? ()
        (rr) when
        Current event: 8998


/home/benutzer/source/rr/git/obj/bin/rr replay -p 29671 /home/benutzer/.local/share/rr/xfce4-terminal-2
        ...
        (rr) b main
        Breakpoint 1 at 0x558299ee5e30
        (rr) cont
        Continuing.

        Breakpoint 1, 0x0000558299ee5e30 in main ()
        (rr) when
        Current event: 7182
        (rr) cont
        Continuing.

        Program received signal SIGHUP, Hangup.
        0x0000000070000002 in ?? ()
        (rr) when
        Current event: 8168
        (rr) cont
        Continuing.

        Program received signal SIGHUP, Hangup.
        0x0000000070000002 in ?? ()
        (rr) when
        Current event: 8195
        (rr) cont
        Continuing.

        Program received signal SIGHUP, Hangup.
        0x0000000070000002 in ?? ()
        (rr) when
        Current event: 8274
        (rr) cont
        Continuing.

        Program received signal SIGKILL, Killed.
        0x0000000070000002 in ?? ()
        (rr) when
        Current event: 8276


##############


/home/benutzer/source/rr/git/obj/bin/rr replay -p 29626 /home/benutzer/.local/share/rr/xfce4-terminal-2

directory /home/benutzer/source/libglib2.0-0/orig/glib2.0-2.58.3/gio/tests/de
directory /home/benutzer/source/libvte-2.91-0/orig/vte2.91-0.54.2/src/vte
directory /home/benutzer/source/xfce4-terminal/orig/xfce4-terminal-0.8.7.4/terminal
directory /home/benutzer/source/libutempter0/orig/libutempter-1.1.6
set width 0
set pagination off
b fork
b waitpid
b sigaction
y
cont





# Installation of signal handler for SIGCHLD

        (rr) bt
        #0  0x00007f1d41d35910 in __sigaction (sig=sig@entry=17, act=act@entry=0x7ffd9f656310, oact=oact@entry=0x0) at ../nptl/sigaction.c:24
        #1  0x00007f1d41f960fe in ref_unix_signal_handler_unlocked (signum=17) at ../../../glib/gmain.c:5236
        #2  0x00007f1d41f960fe in ref_unix_signal_handler_unlocked (signum=17) at ../../../glib/gmain.c:5221
        #3  0x00007f1d41f9631c in g_child_watch_source_new (pid=29630) at ../../../glib/gmain.c:5471
        #4  0x00007f1d41f963b8 in g_child_watch_add_full (priority=priority@entry=300, pid=pid@entry=29630, function=function@entry=0x7f1d43031a10 <vte_reaper_child_watch_cb(GPid, int, gpointer)>, data=0x55f2eacb5400, notify=0x7f1d4228cc80 <g_object_unref>) at ../../../glib/gmain.c:5535
        #5  0x00007f1d43031c62 in vte_reaper_add_child(int) (pid=pid@entry=29630) at ../../src/reaper.cc:143
        #6  0x00007f1d43039284 in vte::terminal::Terminal::watch_child(int) (this=0x55f2eae74000, child_pid=29630) at ../../src/vte.cc:3217
        #7  0x00007f1d4305834c in spawn_async_cb(GObject*, GAsyncResult*, gpointer) (source=<optimized out>, result=<optimized out>, user_data=user_data@entry=0x55f2eb00ebe0) at ../../src/vtegtk.cc:2594
        #8  0x00007f1d4236d799 in g_task_return_now (task=0x55f2eae62ea0 [GTask]) at ../../../gio/gtask.c:1148
        #9  0x00007f1d4236d7d9 in complete_in_idle_cb (task=0x55f2eae62ea0) at ../../../gio/gtask.c:1162
        #10 0x00007f1d41f94dd8 in g_main_dispatch (context=0x55f2eaaf75a0) at ../../../glib/gmain.c:3182
        #11 0x00007f1d41f94dd8 in g_main_context_dispatch (context=context@entry=0x55f2eaaf75a0) at ../../../glib/gmain.c:3847
        #12 0x00007f1d41f951c8 in g_main_context_iterate (context=0x55f2eaaf75a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3920
        #13 0x00007f1d41f954c2 in g_main_loop_run (loop=0x55f2eaacc1d0) at ../../../glib/gmain.c:4116
        #14 0x00007f1d42953b15 in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #15 0x000055f2e9db90d2 in main (argc=<optimized out>, argv=<optimized out>) at main.c:348
        (rr) when
        Current event: 4479



# Creation of PID 29653

        (rr) bt
        #0  0x00007f1d41c28770 in __libc_fork () at ../sysdeps/nptl/fork.c:56
        #1  0x00007f1d4305a388 in  () at /lib/x86_64-linux-gnu/libvte-2.91.so.0
        #2  0x00007f1d43030d52 in  () at /lib/x86_64-linux-gnu/libvte-2.91.so.0
        #3  0x00007f1d43030ed5 in  () at /lib/x86_64-linux-gnu/libvte-2.91.so.0
        #4  0x00007f1d4236e343 in  () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
        #5  0x00007f1d41fbddb3 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
        #6  0x00007f1d41fbd415 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
        #7  0x00007f1d41d2afa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
        #8  0x00007f1d41c5b4cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

        # With debug symbols
        (rr) bt
        #0  0x00007f1d41c28770 in __libc_fork () at ../sysdeps/nptl/fork.c:56
        #1  0x00007f1d4305a388 in fork_exec_with_pipes (error=0x7f1d3d19c830, pollfd=0x0, timeout=30000, standard_error=0x0, standard_output=0x0, standard_input=0x0, child_pid=0x7f1d3d19c8fc, user_data=0x55f2eb122860, child_setup=0x7f1d430302e0 <vte_pty_child_setup(VtePty*)>, cloexec_pipes=0, file_and_argv_zero=1, child_inherits_stdin=1, stderr_to_null=0, stdout_to_null=0, search_path_from_envp=0, search_path=1, close_descriptors=1, envp=0x7f1d34001c70, argv=0x55f2eb123fd0, working_directory=0x55f2eb123fb0 "/home/benutzer", intermediate_child=0) at ../../src/vtespawn.cc:794
        #2  0x00007f1d4305a388 in vte_spawn_async_with_pipes_cancellable(char const*, char**, char**, GSpawnFlags, void (*)(void*), void*, int*, int*, int*, int*, int, _GPollFD*, _GError**) (working_directory=working_directory@entry=0x55f2eb123fb0 "/home/benutzer", argv=argv@entry=0x55f2eb123fd0, envp=envp@entry=0x7f1d34001c70, flags=flags@entry=(G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH | G_SPAWN_CHILD_INHERITS_STDIN | G_SPAWN_FILE_AND_ARGV_ZERO), child_setup=child_setup@entry=0x7f1d430302e0 <vte_pty_child_setup(VtePty*)>, user_data=user_data@entry=0x55f2eb122860, child_pid=0x7f1d3d19c8fc, standard_input=0x0, standard_output=0x0, standard_error=0x0, timeout=30000, pollfd=0x0, error=0x7f1d3d19c830) at ../../src/vtespawn.cc:217
        #3  0x00007f1d43030d52 in __vte_pty_spawn(VtePty*, char const*, char**, char**, GSpawnFlags, GSpawnChildSetupFunc, gpointer, GPid*, int, GCancellable*, GError**) (pty=0x55f2eb122860 [VtePty], directory=0x55f2eb123fb0 "/home/benutzer", argv=0x55f2eb123fd0, envv=<optimized out>, spawn_flags_=<optimized out>, child_setup=0x0, child_setup_data=0x0, child_pid=0x7f1d3d19c8fc, timeout=30000, cancellable=0x0, error=0x7f1d3d19c900) at ../../src/pty.cc:278
        #4  0x00007f1d43030ed5 in async_spawn_run_in_thread(GTask*, gpointer, gpointer, GCancellable*) (task=0x55f2eb0a8430 [GTask], object=<optimized out>, data_=<optimized out>, cancellable=<optimized out>) at ../../src/pty.cc:1099
        #5  0x00007f1d4236e343 in g_task_thread_pool_thread (thread_data=0x55f2eb0a8430, pool_data=<optimized out>) at ../../../gio/gtask.c:1331
        #6  0x00007f1d41fbddb3 in g_thread_pool_thread_proxy (data=<optimized out>) at ../../../glib/gthreadpool.c:307
        #7  0x00007f1d41fbd415 in g_thread_proxy (data=0x55f2eb118770) at ../../../glib/gthread.c:784
        #8  0x00007f1d41d2afa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
        #9  0x00007f1d41c5b4cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
        (rr) when
        Current event: 4941

        # gmain.c:5395      any_unix_signal_pending = TRUE;
        (rr) bt
        #0  0x00007f1d41f91570 in g_unix_signal_handler (signum=17) at ../../../glib/gmain.c:5392
        #1  0x00007f1d41d35730 in <signal handler called> () at /lib/x86_64-linux-gnu/libpthread.so.0
        #2  0x0000000070000002 in  ()
        #3  0x00007f1d431e0579 in _raw_syscall () at /home/benutzer/source/rr/git/rr/src/preload/raw_syscall.S:120
        #4  0x00007f1d431dc5de in traced_raw_syscall (call=call@entry=0x681fffa0) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:252
        #5  0x00007f1d431de1f2 in sys_statfs (call=<optimized out>) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:2932
        #6  0x00007f1d431de1f2 in syscall_hook_internal (call=0x681fffa0) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:3197
        #7  0x00007f1d431de1f2 in syscall_hook (call=0x681fffa0) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:3236
        #8  0x00007f1d431dc480 in _syscall_hook_trampoline () at /home/benutzer/source/rr/git/rr/src/preload/syscall_hook.S:313
        #9  0x00007f1d431dc4df in __morestack () at /home/benutzer/source/rr/git/rr/src/preload/syscall_hook.S:458
        #10 0x00007f1d431dc4fa in _syscall_hook_trampoline_48_3d_00_f0_ff_ff () at /home/benutzer/source/rr/git/rr/src/preload/syscall_hook.S:469
        #11 0x00007f1d41c5081f in __GI___poll (fds=0x55f2eb0968e0, nfds=6, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
        #12 0x00007f1d41f95136 in g_main_context_poll (priority=<optimized out>, n_fds=6, fds=0x55f2eb0968e0, timeout=<optimized out>, context=0x55f2eaaf75a0) at ../../../glib/gmain.c:4221
        #13 0x00007f1d41f95136 in g_main_context_iterate (context=0x55f2eaaf75a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3915
        #14 0x00007f1d41f954c2 in g_main_loop_run (loop=0x55f2eaacc1d0) at ../../../glib/gmain.c:4116
        #15 0x00007f1d42953b15 in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #16 0x000055f2e9db90d2 in main (argc=<optimized out>, argv=<optimized out>) at main.c:348
        (rr) when
        Current event: 6551

        (rr) bt
        #0  0x00007f1d41d35080 in __waitpid (pid=29653, stat_loc=stat_loc@entry=0x55f2eaee7e34, options=options@entry=1) at ../sysdeps/unix/sysv/linux/waitpid.c:30
        #1  0x00007f1d41f9193e in dispatch_unix_signals_unlocked () at ../../../glib/gmain.c:5109
        #2  0x00007f1d41f952b8 in dispatch_unix_signals () at ../../../glib/gmain.c:5150
        #3  0x00007f1d41f952b8 in glib_worker_main (data=<optimized out>) at ../../../glib/gmain.c:5865
        #4  0x00007f1d41fbd415 in g_thread_proxy (data=0x55f2eaaec000) at ../../../glib/gthread.c:784
        #5  0x00007f1d41d2afa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
        #6  0x00007f1d41c5b4cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
        (rr) when
        Current event: 6560




# Creation of PID 29671

        (rr) bt
        #0  0x00007f1d41c28770 in __libc_fork () at ../sysdeps/nptl/fork.c:56
        #1  0x00007f1d4305a388 in fork_exec_with_pipes (error=0x7f1d3d19c830, pollfd=0x0, timeout=30000, standard_error=0x0, standard_output=0x0, standard_input=0x0, child_pid=0x7f1d3d19c8fc, user_data=0x55f2eb12c220, child_setup=0x7f1d430302e0 <vte_pty_child_setup(VtePty*)>, cloexec_pipes=0, file_and_argv_zero=1, child_inherits_stdin=1, stderr_to_null=0, stdout_to_null=0, search_path_from_envp=0, search_path=1, close_descriptors=1, envp=0x7f1d34001ec0, argv=0x55f2ead29290, working_directory=0x55f2ead29270 "/home/benutzer", intermediate_child=0) at ../../src/vtespawn.cc:794
        #2  0x00007f1d4305a388 in vte_spawn_async_with_pipes_cancellable(char const*, char**, char**, GSpawnFlags, void (*)(void*), void*, int*, int*, int*, int*, int, _GPollFD*, _GError**) (working_directory=working_directory@entry=0x55f2ead29270 "/home/benutzer", argv=argv@entry=0x55f2ead29290, envp=envp@entry=0x7f1d34001ec0, flags=flags@entry=(G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH | G_SPAWN_CHILD_INHERITS_STDIN | G_SPAWN_FILE_AND_ARGV_ZERO), child_setup=child_setup@entry=0x7f1d430302e0 <vte_pty_child_setup(VtePty*)>, user_data=user_data@entry=0x55f2eb12c220, child_pid=0x7f1d3d19c8fc, standard_input=0x0, standard_output=0x0, standard_error=0x0, timeout=30000, pollfd=0x0, error=0x7f1d3d19c830) at ../../src/vtespawn.cc:217
        #3  0x00007f1d43030d52 in __vte_pty_spawn(VtePty*, char const*, char**, char**, GSpawnFlags, GSpawnChildSetupFunc, gpointer, GPid*, int, GCancellable*, GError**) (pty=0x55f2eb12c220 [VtePty], directory=0x55f2ead29270 "/home/benutzer", argv=0x55f2ead29290, envv=<optimized out>, spawn_flags_=<optimized out>, child_setup=0x0, child_setup_data=0x0, child_pid=0x7f1d3d19c8fc, timeout=30000, cancellable=0x0, error=0x7f1d3d19c900) at ../../src/pty.cc:278
        #4  0x00007f1d43030ed5 in async_spawn_run_in_thread(GTask*, gpointer, gpointer, GCancellable*) (task=0x55f2eb129ac0 [GTask], object=<optimized out>, data_=<optimized out>, cancellable=<optimized out>) at ../../src/pty.cc:1099
        #5  0x00007f1d4236e343 in g_task_thread_pool_thread (thread_data=0x55f2eb129ac0, pool_data=<optimized out>) at ../../../gio/gtask.c:1331
        #6  0x00007f1d41fbddb3 in g_thread_pool_thread_proxy (data=<optimized out>) at ../../../glib/gthreadpool.c:307
        #7  0x00007f1d41fbd415 in g_thread_proxy (data=0x55f2eb0888f0) at ../../../glib/gthread.c:784
        #8  0x00007f1d41d2afa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
        #9  0x00007f1d41c5b4cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
        (rr) when
        Current event: 6754

        (rr) bt
        #0  0x00007f1d41d35080 in __waitpid (pid=pid@entry=29671, stat_loc=stat_loc@entry=0x55f2ead2ec44, options=options@entry=1) at ../sysdeps/unix/sysv/linux/waitpid.c:30
        #1  0x00007f1d41f96342 in g_child_watch_source_new (pid=29671) at ../../../glib/gmain.c:5473
        #2  0x00007f1d41f963b8 in g_child_watch_add_full (priority=priority@entry=300, pid=pid@entry=29671, function=function@entry=0x7f1d43031a10 <vte_reaper_child_watch_cb(GPid, int, gpointer)>, data=0x55f2eacb5400, notify=0x7f1d4228cc80 <g_object_unref>) at ../../../glib/gmain.c:5535
        #3  0x00007f1d43031c62 in vte_reaper_add_child(int) (pid=pid@entry=29671) at ../../src/reaper.cc:143
        #4  0x00007f1d43039284 in vte::terminal::Terminal::watch_child(int) (this=0x55f2eadaae00, child_pid=29671) at ../../src/vte.cc:3217
        #5  0x00007f1d4305834c in spawn_async_cb(GObject*, GAsyncResult*, gpointer) (source=<optimized out>, result=<optimized out>, user_data=user_data@entry=0x55f2ead29250) at ../../src/vtegtk.cc:2594
        #6  0x00007f1d4236d799 in g_task_return_now (task=0x55f2eb129ac0 [GTask]) at ../../../gio/gtask.c:1148
        #7  0x00007f1d4236d7d9 in complete_in_idle_cb (task=0x55f2eb129ac0) at ../../../gio/gtask.c:1162
        #8  0x00007f1d41f94dd8 in g_main_dispatch (context=0x55f2eaaf75a0) at ../../../glib/gmain.c:3182
        #9  0x00007f1d41f94dd8 in g_main_context_dispatch (context=context@entry=0x55f2eaaf75a0) at ../../../glib/gmain.c:3847
        #10 0x00007f1d41f951c8 in g_main_context_iterate (context=0x55f2eaaf75a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3920
        #11 0x00007f1d41f954c2 in g_main_loop_run (loop=0x55f2eaacc1d0) at ../../../glib/gmain.c:4116
        #12 0x00007f1d42953b15 in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #13 0x000055f2e9db90d2 in main (argc=<optimized out>, argv=<optimized out>) at main.c:348
        (rr) when
        Current event: 7823

    # A new signal handler ???

        (rr) bt
        #0  0x00007f1d41d35910 in __sigaction (sig=sig@entry=17, act=act@entry=0x7ffd9f654a90, oact=oact@entry=0x7ffd9f6549f0) at ../nptl/sigaction.c:24
        #1  0x00007f1d41d44b07 in execute_helper (master_fd=master_fd@entry=12, argv=argv@entry=0x7ffd9f654b60) at iface.c:98
        #2  0x00007f1d41d44cfd in utempter_remove_record (master_fd=12) at iface.c:159
        #3  0x000055f2e9dc952b in terminal_widget_finalize (object=0x55f2eaba1d70 [TerminalWidget]) at terminal-widget.c:202
        #4  0x00007f1d4228ce22 in g_object_unref (_object=<optimized out>) at ../../../gobject/gobject.c:3346
        #5  0x00007f1d4228ce22 in g_object_unref (_object=0x55f2eaba1d70) at ../../../gobject/gobject.c:3238
        #6  0x00007f1d4283c1d0 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #7  0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #11 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eae6b720 [GtkBox]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #8  0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f654df0, invocation_hint=0x7ffd9f654d70) at ../../../gobject/gclosure.c:810
            #9  0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eae6b720, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f654df0) at ../../../gobject/gsignal.c:3549
            #10 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f654fa0) at ../../../gobject/gsignal.c:3391
        #12 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #13 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eae6b720 [GtkBox]) at ../../../gobject/gobject.c:1108
        #14 0x00007f1d42981c30 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #15 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #19 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eab20810 [TerminalScreen]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #16 0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f6552b0, invocation_hint=0x7ffd9f655230) at ../../../gobject/gclosure.c:810
            #17 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eab20810, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f6552b0) at ../../../gobject/gsignal.c:3549
            #18 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f655460) at ../../../gobject/gsignal.c:3391
        #20 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #21 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eab20810 [TerminalScreen]) at ../../../gobject/gobject.c:1108
        #22 0x00007f1d429750de in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #23 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #27 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eadfc6e0 [GtkNotebook]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #24 0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f655790, invocation_hint=0x7ffd9f655710) at ../../../gobject/gclosure.c:810
            #25 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eadfc6e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f655790) at ../../../gobject/gsignal.c:3549
            #26 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f655940) at ../../../gobject/gsignal.c:3391
        #28 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #29 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eadfc6e0 [GtkNotebook]) at ../../../gobject/gobject.c:1108
        #30 0x00007f1d4283c1d0 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #31 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #35 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eae6bf60 [GtkBox]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #32 0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f655c60, invocation_hint=0x7ffd9f655be0) at ../../../gobject/gclosure.c:810
            #33 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eae6bf60, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f655c60) at ../../../gobject/gsignal.c:3549
            #34 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f655e10) at ../../../gobject/gsignal.c:3391
        #36 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #37 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eae6bf60 [GtkBox]) at ../../../gobject/gobject.c:1108
        #38 0x00007f1d42aa73a9 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #39 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #43 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eadf2c00 [TerminalWindow]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #40 0x00007f1d42287c8d in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f656140, invocation_hint=0x7ffd9f6560c0) at ../../../gobject/gclosure.c:810
            #41 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eadf2c00, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f656140) at ../../../gobject/gsignal.c:3549
            #42 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f6562f0) at ../../../gobject/gsignal.c:3391
        #44 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #45 0x00007f1d42aaeb38 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #46 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eadf2c00 [TerminalWindow]) at ../../../gobject/gobject.c:1108
        #47 0x00007f1d42954988 in gtk_main_do_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #48 0x00007f1d42656465 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
        #49 0x00007f1d42687112 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
        #50 0x00007f1d41f94f2e in g_main_dispatch (context=0x55f2eaaf75a0) at ../../../glib/gmain.c:3182
        #51 0x00007f1d41f94f2e in g_main_context_dispatch (context=context@entry=0x55f2eaaf75a0) at ../../../glib/gmain.c:3847
        #52 0x00007f1d41f951c8 in g_main_context_iterate (context=0x55f2eaaf75a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3920
        #53 0x00007f1d41f954c2 in g_main_loop_run (loop=0x55f2eaacc1d0) at ../../../glib/gmain.c:4116
        #54 0x00007f1d42953b15 in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #55 0x000055f2e9db90d2 in main (argc=<optimized out>, argv=<optimized out>) at main.c:348
        (rr) when
        Current event: 8163


    # Reinstalls old signal handler

        (rr) bt
        #0  0x00007f1d41d35910 in __sigaction (sig=sig@entry=17, act=act@entry=0x7ffd9f6549f0, oact=oact@entry=0x0) at ../nptl/sigaction.c:24
        #1  0x00007f1d41d44b39 in execute_helper (master_fd=master_fd@entry=12, argv=argv@entry=0x7ffd9f654b60) at iface.c:133
        #2  0x00007f1d41d44cfd in utempter_remove_record (master_fd=12) at iface.c:159
        #3  0x000055f2e9dc952b in terminal_widget_finalize (object=0x55f2eaba1d70 [TerminalWidget]) at terminal-widget.c:202
        #4  0x00007f1d4228ce22 in g_object_unref (_object=<optimized out>) at ../../../gobject/gobject.c:3346
        #5  0x00007f1d4228ce22 in g_object_unref (_object=0x55f2eaba1d70) at ../../../gobject/gobject.c:3238
        #6  0x00007f1d4283c1d0 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #7  0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #11 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eae6b720 [GtkBox]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #8  0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f654df0, invocation_hint=0x7ffd9f654d70) at ../../../gobject/gclosure.c:810
            #9  0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eae6b720, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f654df0) at ../../../gobject/gsignal.c:3549
            #10 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f654fa0) at ../../../gobject/gsignal.c:3391
        #12 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #13 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eae6b720 [GtkBox]) at ../../../gobject/gobject.c:1108
        #14 0x00007f1d42981c30 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #15 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #19 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eab20810 [TerminalScreen]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #16 0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f6552b0, invocation_hint=0x7ffd9f655230) at ../../../gobject/gclosure.c:810
            #17 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eab20810, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f6552b0) at ../../../gobject/gsignal.c:3549
            #18 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f655460) at ../../../gobject/gsignal.c:3391
        #20 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #21 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eab20810 [TerminalScreen]) at ../../../gobject/gobject.c:1108
        #22 0x00007f1d429750de in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #23 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #27 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eadfc6e0 [GtkNotebook]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #24 0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f655790, invocation_hint=0x7ffd9f655710) at ../../../gobject/gclosure.c:810
            #25 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eadfc6e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f655790) at ../../../gobject/gsignal.c:3549
            #26 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f655940) at ../../../gobject/gsignal.c:3391
        #28 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #29 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eadfc6e0 [GtkNotebook]) at ../../../gobject/gobject.c:1108
        #30 0x00007f1d4283c1d0 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #31 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #35 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eae6bf60 [GtkBox]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #32 0x00007f1d42287ba1 in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f655c60, invocation_hint=0x7ffd9f655be0) at ../../../gobject/gclosure.c:810
            #33 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eae6bf60, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f655c60) at ../../../gobject/gsignal.c:3549
            #34 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f655e10) at ../../../gobject/gsignal.c:3391
        #36 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #37 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eae6bf60 [GtkBox]) at ../../../gobject/gobject.c:1108
        #38 0x00007f1d42aa73a9 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #39 0x00007f1d42887136 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #43 0x00007f1d422a497f in <emit signal ??? on instance 0x55f2eadf2c00 [TerminalWindow]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../../../gobject/gsignal.c:3447
            #40 0x00007f1d42287c8d in g_closure_invoke (closure=0x55f2eab02d50, return_value=0x0, n_param_values=1, param_values=0x7ffd9f656140, invocation_hint=0x7ffd9f6560c0) at ../../../gobject/gclosure.c:810
            #41 0x00007f1d4229b676 in signal_emit_unlocked_R (node=node@entry=0x55f2eab02dc0, detail=detail@entry=0, instance=instance@entry=0x55f2eadf2c00, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9f656140) at ../../../gobject/gsignal.c:3549
            #42 0x00007f1d422a42be in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd9f6562f0) at ../../../gobject/gsignal.c:3391
        #44 0x00007f1d42a9b30c in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #45 0x00007f1d42aaeb38 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #46 0x00007f1d4228e5f8 in g_object_run_dispose (object=0x55f2eadf2c00 [TerminalWindow]) at ../../../gobject/gobject.c:1108
        #47 0x00007f1d42954988 in gtk_main_do_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #48 0x00007f1d42656465 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
        #49 0x00007f1d42687112 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
        #50 0x00007f1d41f94f2e in g_main_dispatch (context=0x55f2eaaf75a0) at ../../../glib/gmain.c:3182
        #51 0x00007f1d41f94f2e in g_main_context_dispatch (context=context@entry=0x55f2eaaf75a0) at ../../../glib/gmain.c:3847
        #52 0x00007f1d41f951c8 in g_main_context_iterate (context=0x55f2eaaf75a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3920
        #53 0x00007f1d41f954c2 in g_main_loop_run (loop=0x55f2eaacc1d0) at ../../../glib/gmain.c:4116
        #54 0x00007f1d42953b15 in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #55 0x000055f2e9db90d2 in main (argc=<optimized out>, argv=<optimized out>) at main.c:348
        (rr) when
        Current event: 8554

# event 8276, PID 29671 got KILL signal

        (rr) bt
        #0  0x00007f1d41f91570 in g_unix_signal_handler (signum=17) at ../../../glib/gmain.c:5392
        #1  0x00007f1d41d35730 in <signal handler called> () at /lib/x86_64-linux-gnu/libpthread.so.0
        #2  0x0000000070000002 in  ()
        #3  0x00007f1d431e0579 in _raw_syscall () at /home/benutzer/source/rr/git/rr/src/preload/raw_syscall.S:120
        #4  0x00007f1d431dc5de in traced_raw_syscall (call=call@entry=0x681fffa0) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:252
        #5  0x00007f1d431de1f2 in sys_statfs (call=<optimized out>) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:2932
        #6  0x00007f1d431de1f2 in syscall_hook_internal (call=0x681fffa0) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:3197
        #7  0x00007f1d431de1f2 in syscall_hook (call=0x681fffa0) at /home/benutzer/source/rr/git/rr/src/preload/syscallbuf.c:3236
        #8  0x00007f1d431dc480 in _syscall_hook_trampoline () at /home/benutzer/source/rr/git/rr/src/preload/syscall_hook.S:313
        #9  0x00007f1d431dc4df in __morestack () at /home/benutzer/source/rr/git/rr/src/preload/syscall_hook.S:458
        #10 0x00007f1d431dc4fa in _syscall_hook_trampoline_48_3d_00_f0_ff_ff () at /home/benutzer/source/rr/git/rr/src/preload/syscall_hook.S:469
        #11 0x00007f1d41c5081f in __GI___poll (fds=0x55f2eb0968e0, nfds=5, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
        #12 0x00007f1d41f95136 in g_main_context_poll (priority=<optimized out>, n_fds=5, fds=0x55f2eb0968e0, timeout=<optimized out>, context=0x55f2eaaf75a0) at ../../../glib/gmain.c:4221
        #13 0x00007f1d41f95136 in g_main_context_iterate (context=0x55f2eaaf75a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:3915
        #14 0x00007f1d41f954c2 in g_main_loop_run (loop=0x55f2eaacc1d0) at ../../../glib/gmain.c:4116
        #15 0x00007f1d42953b15 in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
        #16 0x000055f2e9db90d2 in main (argc=<optimized out>, argv=<optimized out>) at main.c:348
        (rr) when
        Current event: 9002
        
    -> why so late? ... we got here just twice, but three bash processes had executed ???

        (rr) bt
        #0  0x00007f1d41d35080 in __waitpid (pid=29671, stat_loc=stat_loc@entry=0x55f2ead2ec44, options=options@entry=1) at ../sysdeps/unix/sysv/linux/waitpid.c:30
        #1  0x00007f1d41f9193e in dispatch_unix_signals_unlocked () at ../../../glib/gmain.c:5109
        #2  0x00007f1d41f952b8 in dispatch_unix_signals () at ../../../glib/gmain.c:5150
        #3  0x00007f1d41f952b8 in glib_worker_main (data=<optimized out>) at ../../../glib/gmain.c:5865
        #4  0x00007f1d41fbd415 in g_thread_proxy (data=0x55f2eaaec000) at ../../../glib/gthread.c:784
        #5  0x00007f1d41d2afa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
        #6  0x00007f1d41c5b4cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
        (rr) when
        Current event: 9019

        (rr) bt
        #0  0x00007f1d41d35080 in __waitpid (pid=29630, stat_loc=stat_loc@entry=0x55f2eafbd3e4, options=options@entry=1) at ../sysdeps/unix/sysv/linux/waitpid.c:30
        #1  0x00007f1d41f9193e in dispatch_unix_signals_unlocked () at ../../../glib/gmain.c:5109
        #2  0x00007f1d41f952b8 in dispatch_unix_signals () at ../../../glib/gmain.c:5150
        #3  0x00007f1d41f952b8 in glib_worker_main (data=<optimized out>) at ../../../glib/gmain.c:5865
        #4  0x00007f1d41fbd415 in g_thread_proxy (data=0x55f2eaaec000) at ../../../glib/gthread.c:784
        #5  0x00007f1d41d2afa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
        #6  0x00007f1d41c5b4cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
        (rr) when
        Current event: 9023





###########


(rr) list iface.c:89,137
89      static int
90      execute_helper(int master_fd, const char *const argv[])
91      {
92              struct sigaction saved_action, action;
93
94              action.sa_handler = SIG_DFL;
95              action.sa_flags = SA_RESTART;
96              sigemptyset(&action.sa_mask);
97
98              if (sigaction(SIGCHLD, &action, &saved_action) < 0)
99              {
100     #ifdef  UTEMPTER_DEBUG
101                     fprintf(stderr, "libutempter: sigaction: %s\n",
102                             strerror(errno));
103     #endif
104                     return 0;
105             } else
106             {
107                     pid_t   child;
108                     int     status = 1;
109
110                     child = fork();
111                     if (!child)
112                     {
113                             do_child(master_fd, argv[0], (char *const *) argv);
114                     } else if (child < 0)
115                     {
116     #ifdef  UTEMPTER_DEBUG
117                             fprintf(stderr, "libutempter: fork: %s\n",
118                                     strerror(errno));
119     #endif
120                             goto ret;
121                     }
122
123                     if (TEMP_FAILURE_RETRY(waitpid(child, &status, 0)) < 0)
124                     {
125     #ifdef  UTEMPTER_DEBUG
126                             fprintf(stderr, "libutempter: waitpid: %s\n",
127                                     strerror(errno));
128     #endif
129                             status = 1;
130                     }
131
132                   ret:
133                     (void) sigaction(SIGCHLD, &saved_action, 0);
134                     return !status;
135             }
136     }
137

(rr) list iface.c:154,165
154     int
155     utempter_remove_record(int master_fd)
156     {
157             const char *const args[] =
158                     { utempter_pathname ? : UTEMPTER_DEFAULT_PATHNAME, "del", 0 };
159             int     status = execute_helper(master_fd, args);
160
161             if (master_fd == saved_fd)
162                     saved_fd = -1;
163
164             return status;
165     }

(rr) list terminal-widget.c:194,212
194     static void
195     terminal_widget_finalize (GObject *object)
196     {
197       TerminalWidget *widget = TERMINAL_WIDGET (object);
198
199     #ifdef HAVE_LIBUTEMPTER
200       VtePty *pty = vte_terminal_get_pty (VTE_TERMINAL (widget));
201       if (VTE_IS_PTY (pty))
202         utempter_remove_record (vte_pty_get_fd (pty));
203     #endif
204
205       /* disconnect the misc-highlight-urls watch */
206       g_signal_handlers_disconnect_by_func (G_OBJECT (widget->preferences), G_CALLBACK (terminal_widget_update_highlight_urls), widget);
207
208       /* disconnect from the preferences */
209       g_object_unref (G_OBJECT (widget->preferences));
210
211       (*G_OBJECT_CLASS (terminal_widget_parent_class)->finalize) (object);
212     }



Description: Resend SIGCHLD signals if we receive more than expected.

Bug-Debian: https://bugs.debian.org/941125
Forwarded: no
Last-Update: 2020-08-23

Index: libutempter-1.1.6/iface.c
===================================================================
--- libutempter-1.1.6.orig/iface.c
+++ libutempter-1.1.6/iface.c
@@ -86,12 +86,21 @@ do_child(int master_fd, const char *path
 	_exit(EXIT_FAILURE);
 }
 
+static int cnt_SIGCHLD;
+static void handle_SIGCHLD(int signum)
+{
+	if (signum=SIGCHLD)
+	{
+		cnt_SIGCHLD++;
+	}
+}
 static int
 execute_helper(int master_fd, const char *const argv[])
 {
 	struct sigaction saved_action, action;
 
-	action.sa_handler = SIG_DFL;
+	cnt_SIGCHLD = 0;
+	action.sa_handler = handle_SIGCHLD;
 	action.sa_flags = SA_RESTART;
 	sigemptyset(&action.sa_mask);
 
@@ -131,6 +140,12 @@ execute_helper(int master_fd, const char
 
 	      ret:
 		(void) sigaction(SIGCHLD, &saved_action, 0);
+		for (; cnt_SIGCHLD > 1; cnt_SIGCHLD--) {
+			kill(getpid(), SIGCHLD);
+#ifdef	UTEMPTER_DEBUG
+			fprintf(stderr, "libutempter: resent unexpected SIGCHLD\n");
+#endif
+		}
 		return !status;
 	}
 }

Reply to: