Skip to content

Commit

Permalink
kmsdrm: Fix busy-loop within libc's dlopen()
Browse files Browse the repository at this point in the history
For some obscure reason, the order in which the libdrm/libgbm libraries
are loaded matters.

Without this fix, the first call to check_modesetting() will work and
load then unload all symbols properly, but the second call to this
function will lock up as soon as dlopen() is called on libdrm.

Swapping the order in which the libdrm and libgbm libraries are loaded
is enough to fix (or work around?) this issue.

Fixes #4891:
https://bugzilla.libsdl.org/show_bug.cgi?id=4891

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
  • Loading branch information
pcercuei committed Dec 20, 2019
1 parent 6b76787 commit 95d40e8
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/video/kmsdrm/SDL_kmsdrmdyn.c
Expand Up @@ -50,8 +50,8 @@ typedef struct
#endif

static kmsdrmdynlib kmsdrmlibs[] = {
{NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC},
{NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM}
{NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM},
{NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC}
};

static void *
Expand Down

0 comments on commit 95d40e8

Please sign in to comment.