From: Kristian Høgsberg Date: Tue, 1 Oct 2013 22:37:09 +0000 (-0700) Subject: launcher: Set make sure we're drm master when opening the drm device X-Git-Tag: upstream/0.1.8~896 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=57a10e4d136a7d3e5c1260184f38fd5133a5998a;p=profile%2Fivi%2Fweston-ivi-shell.git launcher: Set make sure we're drm master when opening the drm device In case we try to run on a tty where some other process is already drm master, back off and exit with an error message. --- diff --git a/src/launcher-util.c b/src/launcher-util.c index 237f8c5..88eb06a 100644 --- a/src/launcher-util.c +++ b/src/launcher-util.c @@ -65,6 +65,26 @@ struct weston_launcher { struct wl_event_source *vt_source; }; +#ifdef BUILD_DRM_COMPOSITOR +static int +drm_drop_master(int drm_fd) +{ + if (drm_fd != -1) + return drmDropMaster(drm_fd); + return -EBADF; +} +static int +drm_set_master(int drm_fd) +{ + if (drm_fd != -1) + return drmSetMaster(drm_fd); + return -EBADF; +} +#else +static int drm_drop_master(int drm_fd) {return 0;} +static int drm_set_master(int drm_fd) {return 0;} +#endif + int weston_launcher_open(struct weston_launcher *launcher, const char *path, int flags) @@ -81,7 +101,6 @@ weston_launcher_open(struct weston_launcher *launcher, if (launcher->fd == -1) { fd = open(path, flags | O_CLOEXEC); - if (fd == -1) return -1; @@ -90,8 +109,14 @@ weston_launcher_open(struct weston_launcher *launcher, return -1; } - if (major(s.st_rdev) == DRM_MAJOR) + if (major(s.st_rdev) == DRM_MAJOR) { launcher->drm_fd = fd; + if (drm_set_master(fd) == -1) { + weston_log("could not set master on drm fd\n"); + close(fd); + return -1; + } + } return fd; } @@ -198,26 +223,6 @@ weston_launcher_data(int fd, uint32_t mask, void *data) return 1; } -#ifdef BUILD_DRM_COMPOSITOR -static int -drm_drop_master(int drm_fd) -{ - if (drm_fd != -1) - return drmDropMaster(drm_fd); - return -EBADF; -} -static int -drm_set_master(int drm_fd) -{ - if (drm_fd != -1) - return drmSetMaster(drm_fd); - return -EBADF; -} -#else -static int drm_drop_master(int drm_fd) {return 0;} -static int drm_set_master(int drm_fd) {return 0;} -#endif - static int vt_handler(int signal_number, void *data) {