From 7b52d3034e9e4441e40a1e521a16f479b4230c69 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Wed, 12 Nov 2025 07:14:37 -0800 Subject: [PATCH] Fix crash if Renderer is destroyed without having been Init'ed. PiperOrigin-RevId: 831375559 Change-Id: Ia1d0334e32dbbd0582d4f75723867d6ea47bf9da --- src/experimental/toolbox/renderer.cc | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/experimental/toolbox/renderer.cc b/src/experimental/toolbox/renderer.cc index ac56deb8..036f78e7 100644 --- a/src/experimental/toolbox/renderer.cc +++ b/src/experimental/toolbox/renderer.cc @@ -29,24 +29,21 @@ Renderer::Renderer(MakeContextFn make_context_fn) Renderer::~Renderer() { Deinit(); } void Renderer::Init(const mjModel* model) { - if (initialized_) { - Deinit(); + Deinit(); + if (model) { + make_context_fn_(model, &render_context_); + mjv_defaultScene(&scene_); + mjv_makeScene(model, &scene_, 2000); + initialized_ = true; } - - if (model == nullptr) { - return; - } - - make_context_fn_(model, &render_context_); - mjv_defaultScene(&scene_); - mjv_makeScene(model, &scene_, 2000); - initialized_ = true; } void Renderer::Deinit() { - mjv_freeScene(&scene_); - mjr_freeContext(&render_context_); - initialized_ = false; + if (initialized_) { + mjv_freeScene(&scene_); + mjr_freeContext(&render_context_); + initialized_ = false; + } } void Renderer::Render(const mjModel* model, mjData* data,