summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2013-01-09 12:48:30 +1000
committerDave Airlie <airlied@redhat.com>2013-01-09 12:48:30 +1000
commit282e6876fc32d41648684b858e13130c97a58b8e (patch)
tree4256f61ba7468427c9f940aae68140d8cbedf382
parent0ad9fb5109a3cd3bded6455aa2fca0a1fe18e980 (diff)
modesetting: fix crashes caused by udev race conditions
So the kernel removes the device, and the driver processes the first udev event, and gets no output back from the kernel, so it check and don't fall over. This fixes a couple of crashes seen when hotplugging USB devices. Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/drmmode_display.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 8d760c2..42cd5ac 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -589,6 +589,8 @@ drmmode_output_detect(xf86OutputPtr output)
drmModeFreeConnector(drmmode_output->mode_output);
drmmode_output->mode_output = drmModeGetConnector(drmmode->fd, drmmode_output->output_id);
+ if (!drmmode_output->mode_output)
+ return XF86OutputStatusDisconnected;
switch (drmmode_output->mode_output->connection) {
case DRM_MODE_CONNECTED:
@@ -683,6 +685,9 @@ drmmode_output_dpms(xf86OutputPtr output, int mode)
drmModeConnectorPtr koutput = drmmode_output->mode_output;
drmmode_ptr drmmode = drmmode_output->drmmode;
+ if (!koutput)
+ return;
+
drmModeConnectorSetProperty(drmmode->fd, koutput->connector_id,
drmmode_output->dpms_enum_id, mode);
return;