diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2019-04-01 22:38:22 -0400 |
---|---|---|
committer | Ansis Brammanis <ansis@mapbox.com> | 2019-04-01 22:38:22 -0400 |
commit | 097d96de61f7edaddce475c5a9b1f21e960a1396 (patch) | |
tree | 41fcb6e4cf4eec219456d19a4980bd71035d438d | |
parent | 6089031ce340816dadbb99c9eb22d2dd5c2a68a0 (diff) | |
download | qtlocation-mapboxgl-097d96de61f7edaddce475c5a9b1f21e960a1396.tar.gz |
fix segfault
-rw-r--r-- | platform/default/src/mbgl/gl/headless_frontend.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/platform/default/src/mbgl/gl/headless_frontend.cpp b/platform/default/src/mbgl/gl/headless_frontend.cpp index f3dae2dbc9..c311e2df41 100644 --- a/platform/default/src/mbgl/gl/headless_frontend.cpp +++ b/platform/default/src/mbgl/gl/headless_frontend.cpp @@ -20,7 +20,13 @@ HeadlessFrontend::HeadlessFrontend(Size size_, float pixelRatio_, Scheduler& sch asyncInvalidate([this] { if (renderer && updateParameters) { mbgl::BackendScope guard { backend }; - renderer->render(*updateParameters); + + // onStyleImageMissing might be called during a render. The user implemented method + // could trigger a call to MGLRenderFrontend#update which overwrites `updateParameters`. + // Copy the shared pointer here so that the parameters aren't destroyed while `render(...)` is + // still using them. + auto updateParameters_ = updateParameters; + renderer->render(*updateParameters_); } }), renderer(std::make_unique<Renderer>(backend, pixelRatio, scheduler, mode, programCacheDir, localFontFamily)) { |