sna: Check all connectors for reuse
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 25 Jun 2014 06:31:33 +0000 (07:31 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 25 Jun 2014 06:31:33 +0000 (07:31 +0100)
Do not rely on the MST path being present to indicate a connector that
may be reused.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=80355
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
src/sna/sna_display.c

index d3983ec..9c24ea6 100644 (file)
@@ -3385,19 +3385,6 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
                        goto skip;
                }
 
-               if (serial) {
-                       for (i = 0; i < sna->mode.num_real_output; i++) {
-                               output = config->output[i];
-                               if (strcmp(output->name, name) == 0) {
-                                       assert(output->scrn == scrn);
-                                       assert(output->funcs == &sna_output_funcs);
-                                       assert(to_sna_output(output)->id == 0);
-                                       sna_output_destroy(output);
-                                       goto reset;
-                               }
-                       }
-               }
-
                str = xf86GetOptValString(sna->Options, OPTION_ZAPHOD);
                if (str && !sna_zaphod_match(str, name)) {
                        DBG(("%s: zaphod mismatch, want %s, have %s\n", __FUNCTION__, str, name));
@@ -3408,6 +3395,20 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
                len = path;
        }
 
+       /* Check if we are dynamically reattaching an old connector */
+       if (serial) {
+               for (i = 0; i < sna->mode.num_real_output; i++) {
+                       output = config->output[i];
+                       if (strcmp(output->name, name) == 0) {
+                               assert(output->scrn == scrn);
+                               assert(output->funcs == &sna_output_funcs);
+                               assert(to_sna_output(output)->id == 0);
+                               sna_output_destroy(output);
+                               goto reset;
+                       }
+               }
+       }
+
        output = calloc(1, sizeof(*output) + len + 1);
        if (!output)
                goto cleanup;