[client] overlay: clean up partial initialization

This commit is contained in:
Geoffrey McRae
2026-08-12 02:57:42 +10:00
parent 6ddf1d62cd
commit ebc9d076ec
7 changed files with 40 additions and 21 deletions

View File

@@ -38,7 +38,7 @@ struct LG_OverlayOps
/* called when the overlay is registered */
bool (*init)(void ** udata, const void * params);
/* final free */
/* final free; must be safe if init was not called or returned false */
void (*free)(void * udata);
/* return true if realtime rendering is required

View File

@@ -858,8 +858,6 @@ void app_registerOverlay(const struct LG_OverlayOps * ops, const void * params)
ops->earlyInit();
}
static bool l_overlaysInitialized = false;
void app_initOverlays(void)
{
struct Overlay * overlay;
@@ -870,12 +868,12 @@ void app_initOverlays(void)
if (!overlay->ops->init(&overlay->udata, overlay->params))
{
DEBUG_ERROR("Overlay `%s` failed to initialize", overlay->ops->name);
overlay->ops->free(overlay->udata);
ll_removeNL(g_state.overlays, item);
free(item);
free(overlay);
}
}
l_overlaysInitialized = true;
ll_unlock(g_state.overlays);
/* Do not seed ImGui's clock with absolute host uptime. ImGui stores the
@@ -1071,11 +1069,9 @@ void app_freeOverlays(void)
struct Overlay * overlay;
while(ll_shift(g_state.overlays, (void **)&overlay))
{
if (l_overlaysInitialized)
overlay->ops->free(overlay->udata);
overlay->ops->free(overlay->udata);
free(overlay);
}
l_overlaysInitialized = false;
}
void app_setOverlay(bool enable)

View File

@@ -60,6 +60,9 @@ static bool config_init(void ** udata, const void * params)
static void config_freeList(struct ll * list)
{
if (!list)
return;
ConfigCallback * cb;
while(ll_shift(list, (void **)&cb))
{
@@ -73,6 +76,8 @@ static void config_free(void * udata)
{
config_freeList(cfg.callbacks);
config_freeList(cfg.tabCallbacks);
cfg.callbacks = NULL;
cfg.tabCallbacks = NULL;
}
static void config_renderLGTab(void)

View File

@@ -168,16 +168,26 @@ static bool graphs_init(void ** udata, const void * params)
static void graphs_free(void * udata)
{
struct OverlayGraph * graph;
while(ll_shift(gs.graphs, (void **)&graph))
graphFree(graph);
ll_free(gs.graphs);
gs.graphs = NULL;
if (gs.graphs)
{
struct OverlayGraph * graph;
while(ll_shift(gs.graphs, (void **)&graph))
graphFree(graph);
ll_free(gs.graphs);
gs.graphs = NULL;
}
ImPlotSpec_destroy(gs.plotSpec);
gs.plotSpec = NULL;
ImPlot_DestroyContext(gs.plotContext);
gs.plotContext = NULL;
if (gs.plotSpec)
{
ImPlotSpec_destroy(gs.plotSpec);
gs.plotSpec = NULL;
}
if (gs.plotContext)
{
ImPlot_DestroyContext(gs.plotContext);
gs.plotContext = NULL;
}
}
struct BufferMetrics

View File

@@ -75,10 +75,15 @@ static void freeMsg(struct Msg * msg)
static void msg_free(void * udata)
{
struct Msg * msg;
while(ll_shift(l_msg.messages, (void **)&msg))
freeMsg(msg);
ll_free(l_msg.messages);
if (l_msg.messages)
{
struct Msg * msg;
while(ll_shift(l_msg.messages, (void **)&msg))
freeMsg(msg);
ll_free(l_msg.messages);
l_msg.messages = NULL;
}
l_msg.initialized = false;
}

View File

@@ -124,7 +124,7 @@ static bool splash_init(void ** udata, const void * params)
static void splash_free(void * udata)
{
overlayFreeImage(&l_logo);
stringlist_free(&l_tagline );
stringlist_free(&l_tagline);
stringlist_free(&l_footline);
}