xrdp: GFX connection reliably crashes with SIGABRT
This issue is likely to be identical to the third issue I reported in https://github.com/neutrinolabs/xrdp/pull/2942#issuecomment-1948904733.
Testing the latest v0.10 branch c3cb8554b61dd5f3fb03b47c694ab03ab65b2e78 on AlmaLinux 9.3.
Here’s a simple program to reproduce: https://gist.github.com/metalefty/99b688ec67e5debb4d662fb6a12fc069
- Connect to xrdp session from 4k monitor (I tested 3840x2160)
- Start terminal emulator and maximize the window
- Run the program to reproduce
./a.out 200 300- adjust cols arguments to fit your window, and set rows to some big value for example 200.
- xrdp process crashes with SIGABRT when the output of the program drawn
[2024-02-26T04:01:33.731+0000] [ERROR] Child 194657 terminated unexpectedly with signal SIGABRT
When trying to reconnect, xrdp process crashes SIGABRT as soon as reconnected because the same screen will be drawn again. If resize happens when reconnecting (reconnect from a different size), it gets back working. As far as I tested, this issue occurs when the session size is 4k. I can’t reproduce this issue with 2560x1600 geometry. It is a smaller size than 3840x2160. It doesn’t crash when the cols are less than 1/2 of the total screen width.
On FreeBSD, xrdp process doesn’t crash but I get a black blank screen instead. As same as AlmaLinux, it gets back to working when I make resizing happen (moving mstsc to other monitors). It is something related to the GFX encoder.
I also tried v0.10 + cherry-pick #2962 but it doesn’t affect this issue.
@Nexarian I remember you have a 4k monitor. Can you confirm if you can reproduce this issue?
About this issue
- Original URL
- State: open
- Created 4 months ago
- Comments: 21 (21 by maintainers)
This is taking longer than expected to fix. The way RFX works is that ‘tiles_written’ is returned and if that is not the whole tile set, it’s called again. This does not work with GFX because we can’t have missing tiles in the tile set. Remember the green tiles in #2875 . This was caused by the missing tiles. So I have to fix this a different way. Still making multiple calls to librfxcodec but using a region to control the tile set.
Reopened as it needs more investigation.