Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfaults on SIGINT #209

Closed
sooqua opened this issue Jul 28, 2019 · 10 comments
Closed

Segfaults on SIGINT #209

sooqua opened this issue Jul 28, 2019 · 10 comments

Comments

@sooqua
Copy link

sooqua commented Jul 28, 2019

Platform

Arch Linux x86_64 5.2.3-arch1-1-ARCH

GPU, drivers, and screen setup

NVIDIA Quadro K1100M, NVIDIA 430.34, one monitor (laptop)

Environment

Awesome WM. No DE.

Compton version

v7

Compton configuration:

compton.conf.example

# Shadow
shadow = true;
shadow-radius = 7;
shadow-offset-x = -7;
shadow-offset-y = -7;
log-level = "warn";
# log-file = "/path/to/your/log/file";
# shadow-opacity = 0.7;
# shadow-red = 0.0;
# shadow-green = 0.0;
# shadow-blue = 0.0;
shadow-exclude = [
	"name = 'Notification'",
	"class_g = 'Conky'",
	"class_g ?= 'Notify-osd'",
	"class_g = 'Cairo-clock'",
	"_GTK_FRAME_EXTENTS@:c"
];
# shadow-exclude = "n:e:Notification";
# shadow-exclude-reg = "x10+0+0";
# xinerama-shadow-crop = true;

# Opacity
inactive-opacity = 0.8;
# active-opacity = 0.8;
frame-opacity = 0.7;
inactive-opacity-override = false;
# inactive-dim = 0.2;
# inactive-dim-fixed = true;
# blur-background = true;
# blur-background-frame = true;
blur-kern = "3x3box";
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
# blur-background-fixed = true;
blur-background-exclude = [
	"window_type = 'dock'",
	"window_type = 'desktop'",
	"_GTK_FRAME_EXTENTS@:c"
];
# opacity-rule = [ "80:class_g = 'URxvt'" ];

# Fading
fading = true;
# fade-delta = 30;
fade-in-step = 0.03;
fade-out-step = 0.03;
# no-fading-openclose = true;
# no-fading-destroyed-argb = true;
fade-exclude = [ ];

# Other
backend = "xrender";
mark-wmwin-focused = true;
mark-ovredir-focused = true;
# use-ewmh-active-win = true;
detect-rounded-corners = true;
detect-client-opacity = true;
refresh-rate = 0;
vsync = true;
# sw-opti = true;
# unredir-if-possible = true;
# unredir-if-possible-delay = 5000;
# unredir-if-possible-exclude = [ ];
focus-exclude = [ "class_g = 'Cairo-clock'" ];
detect-transient = true;
detect-client-leader = true;
invert-color-include = [ ];
# resize-damage = 1;

# GLX backend
# glx-no-stencil = true;
# glx-no-rebind-pixmap = true;
# xrender-sync-fence = true;
use-damage = true;

# Window type settings
wintypes:
{
  tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
  dock = { shadow = false; }
  dnd = { shadow = false; }
  popup_menu = { opacity = 0.8; }
  dropdown_menu = { opacity = 0.8; }
};

Steps of reproduction

  1. $ compton
  2. <C-c> or pkill -2 compton

Expected behavior

Graceful termination

Current Behavior

[1] 22590 segmentation fault (core dumped) compton

Stack trace

coredumpctl info 22590

           PID: 22590 (compton)
           GID: 985 (users)
        Signal: 11 (SEGV)
  Command Line: compton
    Executable: /usr/bin/compton
 Control Group: /user.slice/user-1000.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-1000.slice
       Session: 2
      Hostname: arch
       Message: Process 22590 (compton) of user 1000 dumped core.

                Stack trace of thread 22590:
                #0  0x0000557da58a056f n/a (compton)
                #1  0x0000557da587c0b7 n/a (compton)
                #2  0x00007fca495d4ee3 __libc_start_main (libc.so.6)
                #3  0x0000557da587d1de n/a (compton)

@yshui
Copy link
Owner

yshui commented Jul 28, 2019

I cannot reproduce this locally.

Can you build compton with debug info so the stack trace can be more useful?

@Ropid
Copy link

Ropid commented Jul 29, 2019

I see that bug here as well.

Here's my stack trace:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000055c6ea790e63 in discard_ignore (ps=0x0, sequence=5821) at ../src/compton.c:269
269		while (ps->ignore_head) {
[Current thread is 1 (Thread 0x7fce1561fdc0 (LWP 24681))]
(gdb) bt
#0  0x000055c6ea790e63 in discard_ignore (ps=0x0, sequence=5821) at ../src/compton.c:269
#1  0x000055c6ea790e98 in should_ignore (ps=0x0, sequence=5821) at ../src/compton.c:284
#2  0x000055c6ea792843 in xerror (dpy=0x55c6ebe41020, ev=0x7ffce9ec3d90) at ../src/compton.c:859
#3  0x00007fce16a1b50a in _XError () from /usr/lib/libX11.so.6
#4  0x00007fce16a18398 in ?? () from /usr/lib/libX11.so.6
#5  0x00007fce16a18445 in ?? () from /usr/lib/libX11.so.6
#6  0x00007fce16a19317 in _XReply () from /usr/lib/libX11.so.6
#7  0x00007fce16a14c3f in XSync () from /usr/lib/libX11.so.6
#8  0x00007fce169f63a9 in XCloseDisplay () from /usr/lib/libX11.so.6
#9  0x000055c6ea797654 in main (argc=1, argv=0x7ffce9ec40d8) at ../src/compton.c:2299

The compton version is this:

$ build/src/compton --version
v6-rc1-224-g5da71e6

@sooqua
Copy link
Author

sooqua commented Jul 29, 2019

I cannot reproduce this locally.

Can you build compton with debug info so the stack trace can be more useful?

Sure, if you can tell me how to build with debug symbols. I'm building from AUR package, I tried changing --buildtype=release to debug, passing CFLAGS, LDFLAGS, and CPPFLAGS with -g, and modifying meson.build file with the same options, but it still generates make-release.sh file instead of debug and objdump /usr/bin/compton --syms shows no symbols.
Using the short gdb instructions from new issue template, I get this, if this is any useful:

Program received signal SIGINT, Interrupt.
0x00007ffff71b63db in epoll_wait () from /usr/lib/libc.so.6
(gdb) bt
#0  0x00007ffff71b63db in epoll_wait () from /usr/lib/libc.so.6
#1  0x00007ffff7e5acd4 in ?? () from /usr/lib/libev.so.4
#2  0x00007ffff7e5d29e in ev_run () from /usr/lib/libev.so.4
#3  0x0000555555567355 in ?? ()
#4  0x0000555555567604 in ?? ()
#5  0x00007ffff70e0ee3 in __libc_start_main () from /usr/lib/libc.so.6
#6  0x000055555555faae in ?? ()
(gdb) q

@yshui
Copy link
Owner

yshui commented Jul 30, 2019

@Ropid I pushed a change that should fix your crash.

@sooqua Can you try the latest next and see if it fix your problem as well?

yshui added a commit that referenced this issue Jul 30, 2019
xerror handler might be called during XCloseDisplay, at which point
session_t is already destroyed, causing a segfault.

Ping #209

Signed-off-by: Yuxuan Shui <[email protected]>
@sooqua
Copy link
Author

sooqua commented Jul 30, 2019

@Ropid I pushed a change that should fix your crash.

@sooqua Can you try the latest next and see if it fix your problem as well?

^C[1] 18549 segmentation fault (core dumped) compton
Nope

$ compton --version
v6-rc1-226-g6cb5f97

@yshui
Copy link
Owner

yshui commented Jul 30, 2019

@sooqua if you build from AUR, you need to add options=('!strip') to your PKGBUILD to get debug symbols

@Ropid
Copy link

Ropid commented Jul 30, 2019

I'm now seeing this output here when I interrupt it:

$ build/src/compton
^CX Error of failed request:  GLXBadPixmap
  Major opcode of failed request:  152 (GLX)
  Minor opcode of failed request:  23 (X_GLXDestroyPixmap)
  Serial number of failed request:  5633
  Current serial number in output stream:  5640

It does not crash, there's no segfault or anything. I'm just worrying about that output. It looks a bit concerning.

When I send a TERM signal (using pkill compton) instead of an INT signal, then it prints the following:

$ build/src/compton
Terminated

The version is this:

$ build/src/compton --version
v6-rc1-226-g6cb5f97

@sooqua
Copy link
Author

sooqua commented Jul 30, 2019

$ coredumpctl info
Stack trace of thread 23644:
                #0  0x0000558fedb13cf6 deinit_render (compton)
                #1  0x0000558fedafc164 session_destroy (compton)
                #2  0x0000558fedafc64b main (compton)
                #3  0x00007f30ebdc9ee3 __libc_start_main (libc.so.6)
                #4  0x0000558fedaf4aae _start (compton)

It doesn't seem to crash under gdb, am I doing something wrong?

(gdb) run
Starting program: /usr/bin/compton
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
^C
Program received signal SIGINT, Interrupt.
0x00007ffff71b63db in epoll_wait () from /usr/lib/libc.so.6
(gdb) bt
#0  0x00007ffff71b63db in epoll_wait () from /usr/lib/libc.so.6
#1  0x00007ffff7e5acd4 in ?? () from /usr/lib/libev.so.4
#2  0x00007ffff7e5d29e in ev_run () from /usr/lib/libev.so.4
#3  0x0000555555567379 in session_run (ps=0x5555555beda0) at ../src/compton.c:2213
#4  0x0000555555567628 in main (argc=1, argv=0x7fffffffe108) at ../src/compton.c:2295
(gdb) q
A debugging session is active.

	Inferior 1 [process 24164] will be killed.

Quit anyway? (y or n) y

@sooqua
Copy link
Author

sooqua commented Jul 30, 2019

Okay, took some gdb courses. Here:

(gdb) handle 2 pass
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) y
Signal        Stop	Print	Pass to program	Description
SIGINT        Yes	Yes	Yes		Interrupt
(gdb) run
Starting program: /usr/bin/compton
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
^C
Program received signal SIGINT, Interrupt.
0x00007ffff71b63db in epoll_wait () from /usr/lib/libc.so.6
(gdb) continue
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x000055555557ecf6 in deinit_render (ps=0x5555555beda0) at ../src/render.c:1220
warning: Source file is more recent than executable.
1220			free(ps->blur_kerns_cache[i]);
(gdb) q

render.c:1220

@yshui yshui closed this as completed in 1f80c8d Jul 31, 2019
@yshui
Copy link
Owner

yshui commented Jul 31, 2019

@sooqua Thanks for your help.

Fixed in next.

yshui added a commit that referenced this issue Aug 1, 2019
xerror handler might be called during XCloseDisplay, at which point
session_t is already destroyed, causing a segfault.

Ping #209

Signed-off-by: Yuxuan Shui <[email protected]>
yshui added a commit that referenced this issue Aug 1, 2019
blur_kernel_count could be none zero when user set a blur kernel but
didn't enable blur. In that case deinit_render will try to free
elements of blur_kerns_cache, causing a segfault because
blur_kerns_cache is never allocated.

Fixes #209

Signed-off-by: Yuxuan Shui <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants