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.
This commit is contained in:
parent
19ec77aef7
commit
57a10e4d13
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue