ecore-drm: Fix segfault if sending output event and output has no current mode
authorChris Michael <cp.michael@samsung.com>
Thu, 14 May 2015 12:36:57 +0000 (08:36 -0400)
committerChris Michael <cp.michael@samsung.com>
Thu, 14 May 2015 12:36:57 +0000 (08:36 -0400)
Summary: This fixes a segfault which could happen if we enable an
output before setting the output current mode. Now we test for an
output having a current_mode, and if not we use the crtc size when
sending the output event.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
src/lib/ecore_drm/ecore_drm_output.c

index 276b74f1006a8ef0da2cbd7e52612a61cb957835..3c2c04c6c8763221dcb3991c170089d60c4f198f 100644 (file)
@@ -42,13 +42,23 @@ _ecore_drm_output_event_send(const Ecore_Drm_Output *output, Eina_Bool plug)
    if (!(e = calloc(1, sizeof(Ecore_Drm_Event_Output)))) return;
    e->plug = plug;
    e->id = output->crtc_id;
-   e->w = output->current_mode->width;
-   e->h = output->current_mode->height;
+
+   if (output->current_mode)
+     {
+        e->w = output->current_mode->width;
+        e->h = output->current_mode->height;
+        e->refresh = output->current_mode->refresh;
+     }
+   else if (output->crtc)
+     {
+        e->w = output->crtc->width;
+        e->h = output->crtc->height;
+     }
+
    e->x = output->x;
    e->y = output->y;
    e->phys_width = output->phys_width;
    e->phys_height = output->phys_height;
-   e->refresh = output->current_mode->refresh;
    e->subpixel_order = output->subpixel;
    e->make = eina_stringshare_ref(output->make);
    e->model = eina_stringshare_ref(output->model);