summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <tiagomatos@gmail.com>2015-10-20 16:01:30 +0200
committerRui Matos <tiagomatos@gmail.com>2015-10-23 14:13:26 +0200
commit86a913d37aae4c96cb2e4d765b58fb4f60ec9d54 (patch)
treebf5d30b8cc22098a85eff558f0ab073ae1f6f74f
parent2857fdbdb887fcaa2e2f25d268c34ae039646e78 (diff)
downloadmutter-86a913d37aae4c96cb2e4d765b58fb4f60ec9d54.tar.gz
monitor-manager-xrandr: Ignore outputs without modes
In some cases we get outputs without any valid mode. We need to ignore them or we'll crash later. https://bugzilla.gnome.org/show_bug.cgi?id=756796
-rw-r--r--src/backends/x11/meta-monitor-manager-xrandr.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index 0acb217a8..a555243f7 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -808,6 +808,15 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
{
GBytes *edid;
+ /* Get this first so that if there are no valid modes we
+ can immediately skip to the next output without having
+ to unwind all the assignments below. */
+ output_get_modes (manager, meta_output, output);
+ if (meta_output->n_modes == 0)
+ continue;
+
+ meta_output->preferred_mode = meta_output->modes[0];
+
meta_output->winsys_id = resources->outputs[i];
meta_output->name = g_strdup (output->name);
@@ -824,8 +833,6 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
meta_output->connector_type = output_get_connector_type (manager_xrandr, meta_output);
output_get_tile_info (manager_xrandr, meta_output);
- output_get_modes (manager, meta_output, output);
- meta_output->preferred_mode = meta_output->modes[0];
meta_output->n_possible_crtcs = output->ncrtc;
meta_output->possible_crtcs = g_new0 (MetaCRTC *, meta_output->n_possible_crtcs);