fvwmorg / fvwm3

FVWM version 3 -- the successor to fvwm2
Other
505 stars 79 forks source link

Segmentation fault while turning off display port cable and mouse pointer is positioned on the monitor which is going off #15

Closed NsCDE closed 4 years ago

NsCDE commented 4 years ago

Hello!

As per request on fvwm@fvwm.org, I have compiled (with -g) fvwm3 and tried things what Thomas said it would be nice to try.

There are glitches (described in separate issues), but the main one is this from the subject: if I enable secondary monitor, either before login or with "xrandr --output eDP1 --mode 1920x1080 --primary --output DP1 --mode 2560x1440 --right-of eDP1 --noprimary" I can work ok.

If mouse pointer is on eDP1 and I turn off DP1, windows from the DP1 are migrated to eDP1 and nothing crashes. But, if mouse pointer is left on the DP1 while pulling off it's cable, FVWM 3 dies with segmentation fault and I'm logged out.

System: HP EliteBook 850 G2 CentOS 7 x86_64 Xorg X.Org X Server 1.20.4 fvwm3 from today's (12. 1. 2020.) clone of the repo.

Here is the gdb trace of the core dump. I have them 3 (repeatable) and they are all the same. Some debug info is missing, but probably this is enought description and function names for thing to be repeatable.

(root!prokopije:~)# gdb /opt/fvwm3/bin/fvwm3 /var/coredumps/core-prokopije-fvwm3-7011-11-6392 Reading symbols from /opt/fvwm3/bin/fvwm3...done. [New LWP 6392] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". Core was generated by `/opt/fvwm3/bin/fvwm3 -f /opt/NsCDE/config/NsCDE-Main.conf -s'. Program terminated with signal 11, Segmentation fault.

0 monitor_by_name (name=) at FScreen.c:130

130 FScreen.c: No such file or directory. Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.6-13.el7.x86_64 cairo-1.15.12-4.el7.x86_64 expat-2.1.0-10.el7_3.x86_64 fontconfig-2.13.0-4.3.el7.x86_64 freetype-2.8-14.el7.x86_64 fribidi-1.0.2-1.el7_7.1.x86_64 gdk-pixbuf2-2.36.12-3.el7.x86_64 glib2-2.56.1-5.el7.x86_64 glibc-2.17-292.el7.x86_64 graphite2-1.3.10-1.el7_3.x86_64 harfbuzz-1.7.5-2.el7.x86_64 libICE-1.0.9-9.el7.x86_64 libSM-1.2.2-2.el7.x86_64 libX11-1.6.7-2.el7.x86_64 libXau-1.0.8-2.1.el7.x86_64 libXcursor-1.1.15-1.el7.x86_64 libXext-1.3.3-3.el7.x86_64 libXfixes-5.0.3-1.el7.x86_64 libXft-2.3.2-2.el7.x86_64 libXpm-3.5.12-1.el7.x86_64 libXrandr-1.5.1-2.el7.x86_64 libXrender-0.9.10-1.el7.x86_64 libblkid-2.23.2-61.el7_7.1.x86_64 libcroco-0.6.12-4.el7.x86_64 libffi-3.0.13-18.el7.x86_64 libgcc-4.8.5-39.el7.x86_64 libglvnd-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-egl-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.x86_64 libmount-2.23.2-61.el7_7.1.x86_64 libpng-1.5.13-7.el7_2.x86_64 librsvg2-2.40.20-1.el7.x86_64 libselinux-2.5-14.1.el7.x86_64 libstroke-0.5.1-33.el7.x86_64 libthai-0.1.14-9.el7.x86_64 libuuid-2.23.2-61.el7_7.1.x86_64 libxcb-1.13-1.el7.x86_64 libxml2-2.9.1-6.el7_2.3.x86_64 pango-1.42.4-4.el7_7.x86_64 pcre-8.32-17.el7.x86_64 pixman-0.34.0-1.el7.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64 (gdb) bt

0 monitor_by_name (name=) at FScreen.c:130

1 0x00000000004861b3 in FindScreen (screen=screen@entry=FSCREEN_BY_NAME, arg=) at FScreen.c:383

2 FScreenGetScrRect (arg=arg@entry=0x7ffe64ed0a20, screen=screen@entry=FSCREEN_BY_NAME, x=x@entry=0x7ffe64ed08c0, y=y@entry=0x7ffe64ed08c4, w=w@entry=0x7ffe64ed08c8, h=h@entry=0x7ffe64ed08cc)

at FScreen.c:433

3 0x000000000044d507 in __place_window (reason=0x7ffe64ed0930, win_opts=0x7ffe64ed0ba0, mode=1, attr_g=0x7ffe64ed0b90, pstyle=0x7ffe64ed0c50, exc=0x1721470, start_style=...) at placement.c:1669

4 setup_window_placement (fw=, pstyle=pstyle@entry=0x7ffe64ed0c50, attr_g=attr_g@entry=0x7ffe64ed0b90, win_opts=win_opts@entry=0x7ffe64ed0ba0, mode=mode@entry=PLACE_AGAIN)

at placement.c:2277

5 0x000000000044e19e in CMD_PlaceAgain (cond_rc=, exc=0x17631e0, action=0x1725d2a "") at placement.c:2353

6 0x00000000004627cb in __execute_function (cond_rc=cond_rc@entry=0x7ffe64ed1360, exc=exc@entry=0x172fca0, action=action@entry=0x175f5f4 "PlaceAgain", exec_flags=,

exec_flags@entry=128 '\200', args=args@entry=0x0, has_ref_window_moved=has_ref_window_moved@entry=0) at functions.c:639

7 0x00000000004634e1 in execute_function (exec_flags=128 '\200', action=0x175f5f4 "PlaceAgain", exc=0x172fca0, cond_rc=0x7ffe64ed1360) at functions.c:1302

8 execute_function_override_window (cond_rc=cond_rc@entry=0x7ffe64ed1360, exc=exc@entry=0x173e0b0, action=0x175f5f4 "PlaceAgain", exec_flags=128 '\200', exec_flags@entry=0 '\000', fw=)

at functions.c:1352

9 0x0000000000456859 in CMD_All (cond_rc=0x7ffe64ed1360, exc=0x173e0b0, action=) at conditional.c:1646

10 0x00000000004627cb in __execute_function (cond_rc=cond_rc@entry=0x0, exc=exc@entry=0x1748740, action=action@entry=0x49e1d9 "All PlaceAgain", exec_flags=, exec_flags@entry=0 '\000',

args=args@entry=0x0, has_ref_window_moved=has_ref_window_moved@entry=0) at functions.c:639

11 0x00000000004634e1 in execute_function (exec_flags=0 '\000', action=0x49e1d9 "All PlaceAgain", exc=0x1748740, cond_rc=0x0) at functions.c:1302

12 execute_function_override_window (cond_rc=cond_rc@entry=0x0, exc=exc@entry=0x0, action=action@entry=0x49e1d9 "All PlaceAgain", exec_flags=exec_flags@entry=0 '\000', fw=fw@entry=0x0) at functions.c:1352

13 0x0000000000428e97 in HandleRRScreenChangeNotify (e=e@entry=0x7ffe64ed16b0) at events.c:1798

14 0x000000000042b5b8 in dispatch_event (e=e@entry=0x7ffe64ed16b0) at events.c:4122

15 0x000000000042c25d in HandleEvents () at events.c:4231

16 0x000000000040af4a in main (argc=, argv=0x7ffe64ed1f28) at fvwm3.c:2597

ThomasAdam commented 4 years ago

Hello,

Thank you for your bug report. Can you please try and reproduce this on the ta/desktops branch, please? I've made a number of different changes there which aren't yet on master.

From my limited testing based on your report, turning off the active screen with xrandr which also contains the mouse pointer, doesn't crash fvwm3, and indeed, unlike the code on master at the moment, when monitors are disabled/created, I'm not blindly running All PlaceAgain which was half the problem. Instead, windows on the inactive output are moved to the active monitor.

All of that said, I've just noticed that you were invoking fvwm3 with the -s option. For now, would you mind removing that option to fvwm3? -s makes sense if you want fvwm3 to start up completely independently of each other on all screens, but with RandR support, fvwm3 should cope much better, and it might be that I end up making -s a noop in that regard. But for now, please remove -s and see how things go.

NsCDE commented 4 years ago

Hello Thomas,

Branch ta/desktops indeed does not reproduce this bug. I can left pointer on monitor which is going to be shut off and nothing happens, but windows from dead output are not moved to active one. They wait there and when I turn monitor back, they are here.

Maybe (on the end product) there should be some builtin fvwmfunc for that situation, but which can be overriden by user in configuration.

About "-s" ... it was put there by display manager during login. I didn't even noticed that in gdb trace. I have made sure it is disabled prior to ta/desktops testing.

ThomasAdam commented 4 years ago

@NsCDE The problem with having a function is it has the ability to really get confusing. I'll look into it. Thanks!

ThomasAdam commented 4 years ago

This has been fixed on ta/fix-gh-16 -- unclear which change as there were a number of little changes which will have fixed this. Will reference this issue in the commit message when reordered and merged to master.