dri2: Open the fd before loading the driver.
I want to stop trusting the server for the driver name, and instead decide on our own based on the fd, so I needed this code motion. Reviewed-by: Keith Packard <keithp@keithp.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
@@ -1179,6 +1179,20 @@ dri2CreateScreen(int screen, struct glx_display * priv)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef O_CLOEXEC
|
||||||
|
psc->fd = open(deviceName, O_RDWR | O_CLOEXEC);
|
||||||
|
if (psc->fd == -1 && errno == EINVAL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
psc->fd = open(deviceName, O_RDWR);
|
||||||
|
if (psc->fd != -1)
|
||||||
|
fcntl(psc->fd, F_SETFD, fcntl(psc->fd, F_GETFD) | FD_CLOEXEC);
|
||||||
|
}
|
||||||
|
if (psc->fd < 0) {
|
||||||
|
ErrorMessageF("failed to open drm device: %s\n", strerror(errno));
|
||||||
|
goto handle_error;
|
||||||
|
}
|
||||||
|
|
||||||
psc->driver = driOpenDriver(driverName);
|
psc->driver = driOpenDriver(driverName);
|
||||||
if (psc->driver == NULL) {
|
if (psc->driver == NULL) {
|
||||||
ErrorMessageF("driver pointer missing\n");
|
ErrorMessageF("driver pointer missing\n");
|
||||||
@@ -1201,20 +1215,6 @@ dri2CreateScreen(int screen, struct glx_display * priv)
|
|||||||
goto handle_error;
|
goto handle_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef O_CLOEXEC
|
|
||||||
psc->fd = open(deviceName, O_RDWR | O_CLOEXEC);
|
|
||||||
if (psc->fd == -1 && errno == EINVAL)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
psc->fd = open(deviceName, O_RDWR);
|
|
||||||
if (psc->fd != -1)
|
|
||||||
fcntl(psc->fd, F_SETFD, fcntl(psc->fd, F_GETFD) | FD_CLOEXEC);
|
|
||||||
}
|
|
||||||
if (psc->fd < 0) {
|
|
||||||
ErrorMessageF("failed to open drm device: %s\n", strerror(errno));
|
|
||||||
goto handle_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (drmGetMagic(psc->fd, &magic)) {
|
if (drmGetMagic(psc->fd, &magic)) {
|
||||||
ErrorMessageF("failed to get magic\n");
|
ErrorMessageF("failed to get magic\n");
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
|
Reference in New Issue
Block a user