diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp index 23544cf..9de8e14 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp @@ -213,6 +213,8 @@ extern bool g_bIntegerScale; bool synchronize; +std::mutex g_SteamCompMgrXWaylandServerMutex; + enum HeldCommitTypes_t { HELD_COMMIT_BASE, @@ -4286,6 +4288,8 @@ steamcompmgr_main(int argc, char **argv) int vblankFD = vblank_init(); assert( vblankFD >= 0 ); + std::unique_lock xwayland_server_guard(g_SteamCompMgrXWaylandServerMutex); + // Initialize any xwayland ctxs we have { gamescope_xwayland_server_t *server = NULL; diff --git a/src/wlserver.cpp b/src/wlserver.cpp index 31c4dcf..a041d5a 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -817,6 +817,8 @@ void wlserver_unlock(void) pthread_mutex_unlock(&waylock); } +extern std::mutex g_SteamCompMgrXWaylandServerMutex; + void wlserver_run(void) { struct pollfd pollfd = { @@ -851,6 +853,8 @@ void wlserver_run(void) } } + // Released when steamcompmgr closes. + std::unique_lock xwayland_server_guard(g_SteamCompMgrXWaylandServerMutex); // We need to shutdown Xwayland before disconnecting all clients, otherwise // wlroots will restart it automatically. wlserver.wlr.xwayland_servers.clear();