diff --git a/src/xrt/compositor/main/comp_compositor.c b/src/xrt/compositor/main/comp_compositor.c index 7b6c48950..22664b918 100644 --- a/src/xrt/compositor/main/comp_compositor.c +++ b/src/xrt/compositor/main/comp_compositor.c @@ -552,10 +552,7 @@ compositor_destroy(struct xrt_compositor *xc) // Make sure we don't have anything to destroy. comp_compositor_garbage_collect(c); - if (c->r) { - comp_renderer_destroy(c->r); - c->r = NULL; - } + comp_renderer_destroy(&c->r); comp_resources_close(c, &c->nr); diff --git a/src/xrt/compositor/main/comp_renderer.c b/src/xrt/compositor/main/comp_renderer.c index bc2c8e928..8197cc42c 100644 --- a/src/xrt/compositor/main/comp_renderer.c +++ b/src/xrt/compositor/main/comp_renderer.c @@ -120,10 +120,18 @@ comp_renderer_create(struct comp_compositor *c) } void -comp_renderer_destroy(struct comp_renderer *r) +comp_renderer_destroy(struct comp_renderer **ptr_r) { + if (ptr_r == NULL) { + return; + } + struct comp_renderer *r = *ptr_r; + if (r == NULL) { + return; + } renderer_destroy(r); free(r); + *ptr_r = NULL; } /* diff --git a/src/xrt/compositor/main/comp_renderer.h b/src/xrt/compositor/main/comp_renderer.h index 48c28f03f..c1edaaf5a 100644 --- a/src/xrt/compositor/main/comp_renderer.h +++ b/src/xrt/compositor/main/comp_renderer.h @@ -38,11 +38,13 @@ comp_renderer_create(struct comp_compositor *c); /*! * Clean up and free the renderer. * + * Does null checking and sets to null after freeing. + * * @public @memberof comp_renderer * @ingroup comp_main */ void -comp_renderer_destroy(struct comp_renderer *r); +comp_renderer_destroy(struct comp_renderer **ptr_r); /*! * Render frame.