FreeRDP/client
Pascal Nowack 8fc7062605 client/cliprdr_file: Do not deadlock with FUSE2 when stopping fuse loop
FUSE2 has compared to FUSE3 a rather complicated structure with respect
to the FUSE loop, as it uses two handles for the loop and the mount.
Due to needing the possibility to invalidate inodes during the session
and to exit the FUSE session, the session and channel handles need to be
kept alive.
When the session stops, and with that the FUSE session too, the FUSE
thread must still be able to unmount the FUSE mount.
But due to FUSE2's annoying structure, the FUSE session must be
destroyed before doing this.
In this time period, where the FUSE2 loop stops running and between
stopping the FUSE2 session, it cannot answer any requests.
As a result, the "path test", where the mount path is poked cannot be
performed.
This "path test" is however necessary to ensure, that the FUSE loop
exits.
So, the main thread pokes at the FUSE mount to ensure the loop
definitely exits to then signal the FUSE thread, that it can destroy the
session and channel object.
But at the same time, the FUSE loop may already exited and wait for the
main thread to be signalled, that it can destroy the session and channel
object.
The waiting conditions here cannot be satisfied, leading to a deadlock.

Fix this situation, by already signalling the FUSE thread, that it can
destroy the FUSE objects, after calling fuse_session_exit.
2023-08-04 11:08:01 +02:00
..
Android [client,android] Fix keyboard ui issues 2023-08-02 19:50:00 +02:00
common client/cliprdr_file: Do not deadlock with FUSE2 when stopping fuse loop 2023-08-04 11:08:01 +02:00
iOS [pointer] unify mouse pointer settings 2023-07-03 10:00:29 +02:00
Mac [clien,mac] fix clipboard text copy 2023-07-17 10:41:46 +02:00
Sample [cmake] unify RPATH settings and client deps detection 2023-05-26 11:38:32 +02:00
SDL [client,sdl] clean up code 2023-07-31 13:41:26 +02:00
Wayland [pointer] unify mouse pointer settings 2023-07-03 10:00:29 +02:00
Windows [cmake] use find_library for windows libs 2023-08-01 13:32:35 +02:00
X11 Export interface include directories 2023-08-01 11:12:46 +02:00
.gitignore [clients] clean up .gitignore 2023-02-15 13:34:18 +01:00
CMakeLists.txt [cmake] do not always build client-common 2023-07-25 07:29:36 +02:00
freerdp-client.pc.in [pkg-config] unify exec_prefix 2023-04-24 22:01:15 +02:00
FreeRDP-ClientConfig.cmake.in find_dependency for exported cmake config 2023-08-01 08:13:30 +02:00