diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-06-03 08:18:56 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-06-03 08:18:56 +0200 |
commit | c382e9317d7052eddb3960f61886651096c35b50 (patch) | |
tree | 345c7084c3ab96fae1f8cec6ad792fc09de8d7c6 /src | |
parent | typo (diff) | |
download | libgamma-c382e9317d7052eddb3960f61886651096c35b50.tar.gz libgamma-c382e9317d7052eddb3960f61886651096c35b50.tar.bz2 libgamma-c382e9317d7052eddb3960f61886651096c35b50.tar.xz |
gamma-linux-drm: do not attempt to get the encoder for disabled connectors
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/gamma-linux-drm.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/lib/gamma-linux-drm.c b/src/lib/gamma-linux-drm.c index 5f66cdf..f192310 100644 --- a/src/lib/gamma-linux-drm.c +++ b/src/lib/gamma-linux-drm.c @@ -451,15 +451,19 @@ static drmModeConnector* find_connector(libgamma_crtc_state_t* restrict this, in if ((card->encoders = calloc(n, sizeof(drmModeEncoder*))) == NULL) goto fail; /* Fill connector and encoder arrays. */ for (i = 0; i < n; i++) - if (((card->connectors[i] = drmModeGetConnector(card->fd, card->res->connectors[i])) == NULL) || - ((card->encoders[i] = drmModeGetEncoder(card->fd, card->connectors[i]->encoder_id)) == NULL)) - goto fail; + { + if ((card->connectors[i] = drmModeGetConnector(card->fd, card->res->connectors[i])) == NULL) + goto fail; + if ((card->connectors[i]->encoder_id != 0) && + ((card->encoders[i] = drmModeGetEncoder(card->fd, card->connectors[i]->encoder_id)) == NULL)) + goto fail; + } } /* No error has occurred yet. */ *error = 0; /* Find connector. */ for (i = 0; i < n; i++) - if (card->encoders[i]->crtc_id == crtc_id) + if ((card->encoders[i] != NULL) && (card->encoders[i]->crtc_id == crtc_id)) return card->connectors[i]; /* We did not find the connector. */ *error = LIBGAMMA_CONNECTOR_UNKNOWN; @@ -749,6 +753,8 @@ int libgamma_linux_drm_get_crtc_information(libgamma_crtc_information_t* restric /* Find connector. */ if ((connector = find_connector(crtc, &error)) == NULL) { + perror("connector not found"); + abort(); /* Store reported error in affected fields. */ e |= this->width_mm_error = this->height_mm_error = this->connector_type = this->subpixel_order_error |