aboutsummaryrefslogtreecommitdiff
path: root/hwcomposer.cpp
diff options
context:
space:
mode:
authorHaixia Shi <hshi@chromium.org>2015-09-30 10:57:54 -0700
committerHaixia Shi <hshi@chromium.org>2015-09-30 11:01:26 -0700
commit7acc59be7f12ad45b9abfa56c2d21726edf6224e (patch)
tree4d1ee8bd0bdfe7259d37894ab1c840ec047c5d83 /hwcomposer.cpp
parentd106b919a575fb45388ee4a21b41c77e18e7cd27 (diff)
downloaddrm_hwcomposer-7acc59be7f12ad45b9abfa56c2d21726edf6224e.tar.gz
drm_hwcomposer: fix crash in hwc_set()
For each display context we need to unconditionally call emplace_back() on layers_indices to ensure that entries in layers_indices correspond to the correct display. BUG=24506167 TEST=still builds and boots ok Change-Id: I6bc0858471c9ec51615c8ed7d8613529f77cb1ab
Diffstat (limited to 'hwcomposer.cpp')
-rw-r--r--hwcomposer.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/hwcomposer.cpp b/hwcomposer.cpp
index 0a8b661..5181d84 100644
--- a/hwcomposer.cpp
+++ b/hwcomposer.cpp
@@ -409,6 +409,8 @@ static int hwc_set(hwc_composer_device_1_t *dev, size_t num_displays,
hwc_display_contents_1_t *dc = sf_display_contents[i];
displays_contents.emplace_back();
DrmHwcDisplayContents &display_contents = displays_contents.back();
+ layers_indices.emplace_back();
+ std::vector<size_t> &indices_to_composite = layers_indices.back();
if (!sf_display_contents[i])
continue;
@@ -422,7 +424,6 @@ static int hwc_set(hwc_composer_device_1_t *dev, size_t num_displays,
display_contents.retire_fence = OutputFd(&dc->retireFenceFd);
size_t num_dc_layers = dc->numHwLayers;
- std::vector<size_t> indices_to_composite;
int framebuffer_target_index = -1;
for (size_t j = 0; j < num_dc_layers; ++j) {
hwc_layer_1_t *sf_layer = &dc->hwLayers[j];
@@ -474,7 +475,6 @@ static int hwc_set(hwc_composer_device_1_t *dev, size_t num_displays,
indices_to_composite.push_back(framebuffer_target_index);
}
}
- layers_indices.emplace_back(indices_to_composite);
}
if (ret)