mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-22 07:01:30 +00:00
[client] overlay: clean up partial initialization
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
free(overlay);
|
||||
}
|
||||
l_overlaysInitialized = false;
|
||||
}
|
||||
|
||||
void app_setOverlay(bool enable)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -167,18 +167,28 @@ static bool graphs_init(void ** udata, const void * params)
|
||||
}
|
||||
|
||||
static void graphs_free(void * udata)
|
||||
{
|
||||
if (gs.graphs)
|
||||
{
|
||||
struct OverlayGraph * graph;
|
||||
while(ll_shift(gs.graphs, (void **)&graph))
|
||||
graphFree(graph);
|
||||
ll_free(gs.graphs);
|
||||
gs.graphs = NULL;
|
||||
}
|
||||
|
||||
if (gs.plotSpec)
|
||||
{
|
||||
ImPlotSpec_destroy(gs.plotSpec);
|
||||
gs.plotSpec = NULL;
|
||||
}
|
||||
|
||||
if (gs.plotContext)
|
||||
{
|
||||
ImPlot_DestroyContext(gs.plotContext);
|
||||
gs.plotContext = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
struct BufferMetrics
|
||||
{
|
||||
|
||||
@@ -74,11 +74,16 @@ static void freeMsg(struct Msg * msg)
|
||||
}
|
||||
|
||||
static void msg_free(void * udata)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@ StringList stringlist_new(bool owns_strings)
|
||||
|
||||
void stringlist_free(StringList * sl)
|
||||
{
|
||||
if (!sl || !*sl)
|
||||
return;
|
||||
|
||||
stringlist_clear(*sl);
|
||||
|
||||
vector_destroy(&(*sl)->vector);
|
||||
|
||||
Reference in New Issue
Block a user