bradharding / doomretro

The classic, refined DOOM source port. For Windows PC.
https://www.doomretro.com
GNU General Public License v3.0
695 stars 88 forks source link

Segmentation fault in linux when pressing space bar or tilde key #766

Open josephreynolds1 opened 1 year ago

josephreynolds1 commented 1 year ago

Segmentation fault in Linux when pressing space bar or tilde key.

This happens in the main screen menus or in game.

Issue happens on latest build from source.

bradharding commented 1 year ago

Thanks for letting me know. I'll look into it when I can. Any chance you could please provide a stack trace?

josephreynolds1 commented 1 year ago

mprotect(0x7fdf052d6000, 4096, PROT_READ) = 0 brk(0x55baa3d77000) = 0x55baa3d77000 poll([{fd=5, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=5, revents=POLLOUT}]) writev(5, [{iov_base="\22\0\7\0\v\0\2\255\1\0\0\6\0\0\0 \0\1\0\1\0\0\0\200\3444\v", iov_len=28}, {iov_base=NULL, iov_len=0}, {iov_base="", iov_len=0}], 3) = 28 recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) clock_gettime(CLOCK_MONOTONIC_RAW, {tv_sec=188004, tv_nsec=759569602}) = 0 recvmsg(5, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\34\0\6\1\v\0\2\255\1\0\0\232\3454\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 32 recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=12, events=POLLIN}], 1, 0) = 0 (Timeout) poll([{fd=11, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC_RAW, {tv_sec=188004, tv_nsec=759732751}) = 0 recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=12, events=POLLIN}], 1, 0) = 0 (Timeout) poll([{fd=11, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC_RAW, {tv_sec=188004, tv_nsec=759841215}) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} --- +++ killed by SIGSEGV +++ Segmentation fault

bradharding commented 1 year ago

Sorry, I'm not sure what this. My best guess is its a problem with SDL, since it would call clock_gettime(). Since a sound is played when pressing the space or tilde keys, it could also be SDL_mixer. Does the segfault still happen if you use -nosound?

bradharding commented 1 year ago

After a bit of Googling, I found this which may help: https://github.com/OpenRCT2/OpenRCT2/issues/6364

josephreynolds1 commented 1 year ago

Tried it with -nosound and still crashes as soon as you press the space bar or tilde at any point once doomretro is running.

ismagilli commented 1 year ago

mprotect(0x7fdf052d6000, 4096, PROT_READ) = 0 brk(0x55baa3d77000) = 0x55baa3d77000 poll([{fd=5, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=5, revents=POLLOUT}]) writev(5, [{iov_base="\22\0\7\0\v\0\2\255\1\0\0\6\0\0\0 \0\1\0\1\0\0\0\200\3444\v", iov_len=28}, {iov_base=NULL, iov_len=0}, {iov_base="", iov_len=0}], 3) = 28 recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) clock_gettime(CLOCK_MONOTONIC_RAW, {tv_sec=188004, tv_nsec=759569602}) = 0 recvmsg(5, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\34\0\6\1\v\0\2\255\1\0\0\232\3454\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 32 recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=12, events=POLLIN}], 1, 0) = 0 (Timeout) poll([{fd=11, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC_RAW, {tv_sec=188004, tv_nsec=759732751}) = 0 recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) recvmsg(5, {msg_namelen=0}, 0) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=12, events=POLLIN}], 1, 0) = 0 (Timeout) poll([{fd=11, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) clock_gettime(CLOCK_MONOTONIC_RAW, {tv_sec=188004, tv_nsec=759841215}) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} --- +++ killed by SIGSEGV +++ Segmentation fault

This is not stack trace, it is output of strace utility (https://strace.io). To produce stack trace please use something like this (you need to install gdb debugger):

  1. Cloning git repo: git clone https://github.com/bradharding/doomretro;
  2. Enter doomretro dir: cd doomretro;
  3. Compile with debug info: cmake -B build_debug -S . -DCMAKE_BUILD_TYPE=Debug; cmake --build build_debug -- -j4; Now executable file can be found here: build_debug/doomretro;
  4. Run with debugger: gdb -- build_debug/doomretro ARGS where ARGS is doomretro arguments, for example, -iwad DOOM.WAD;
  5. Type run or r command in gdb to run program;
  6. When a problem occurs, type backtrace or bt command in gdb to display the call stack.

And it is better to use the "code" environment to insert the output of programs in issues. =)