From 9b2cf5c7ab6e1a4a9aa46b297fb2f90cb09124ec Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 21 Aug 2014 08:17:41 +0100 Subject: [PATCH] sna: Propagate failure from changing backlight value Especially when we delete the output property halfway through and the ChangeProperty routine then attempts to wire it back up... Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82833 Signed-off-by: Chris Wilson --- src/sna/sna_display.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 710f938f..ea0324b1 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -595,10 +595,11 @@ static void sna_backlight_drain_uevents(struct sna *sna) { } static void sna_backlight_close(struct sna *sna) { } #endif -static void +static int sna_output_backlight_set(struct sna_output *sna_output, int level) { xf86OutputPtr output = sna_output->base; + int ret = 0; DBG(("%s(%s) level=%d, max=%d\n", __FUNCTION__, output->name, level, sna_output->backlight.max)); @@ -612,6 +613,7 @@ sna_output_backlight_set(struct sna_output *sna_output, int level) RRDeleteOutputProperty(output->randr_output, backlight_atom); RRDeleteOutputProperty(output->randr_output, backlight_deprecated_atom); } + ret = -1; } /* Consume the uevent notification now so that we don't misconstrue @@ -619,6 +621,7 @@ sna_output_backlight_set(struct sna_output *sna_output, int level) * state. */ sna_backlight_drain_uevents(to_sna(output->scrn)); + return ret; } static int @@ -3156,6 +3159,7 @@ sna_output_set_property(xf86OutputPtr output, Atom property, if (property == backlight_atom || property == backlight_deprecated_atom) { INT32 val; + int ret = 0; if (value->type != XA_INTEGER || value->format != 32 || value->size != 1) @@ -3171,8 +3175,8 @@ sna_output_set_property(xf86OutputPtr output, Atom property, sna_output->backlight_active_level = val; if (sna_output->dpms_mode == DPMSModeOn) - sna_output_backlight_set(sna_output, val); - return TRUE; + ret = sna_output_backlight_set(sna_output, val); + return ret == 0; } if (!sna_output->id)