From 36588f0937126b17384a14a0a2da7df31ab41d62 Mon Sep 17 00:00:00 2001 From: Amir Raminfar Date: Wed, 5 Mar 2025 08:44:04 -0800 Subject: [PATCH] fix: tries to fix nil pointer when container for event is not there --- assets/typed-router.d.ts | 2 +- internal/container/container_store.go | 67 ++++++++++++++------------- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/assets/typed-router.d.ts b/assets/typed-router.d.ts index 36be6b56..f216f024 100644 --- a/assets/typed-router.d.ts +++ b/assets/typed-router.d.ts @@ -1,7 +1,7 @@ /* eslint-disable */ /* prettier-ignore */ // @ts-nocheck -// Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️ +// Generated by unplugin-vue-router. \u203C\uFE0F DO NOT MODIFY THIS FILE \u203C\uFE0F // It's recommended to commit this file. // Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry. diff --git a/internal/container/container_store.go b/internal/container/container_store.go index 5efee819..4ce7bb42 100644 --- a/internal/container/container_store.go +++ b/internal/container/container_store.go @@ -182,7 +182,7 @@ func (s *ContainerStore) FindContainer(id string, labels ContainerLabels) (Conta return &newContainer, false } else { log.Error().Err(err).Msg("failed to fetch container") - return c, false + return c, true } } return c, false @@ -313,39 +313,42 @@ func (s *ContainerStore) init() { s.containers.Delete(event.ActorID) case "update": - started := false - updatedContainer, _ := s.containers.Compute(event.ActorID, func(c *Container, loaded bool) (*Container, bool) { - if loaded { - newContainer := event.Container - if newContainer.State == "running" && c.State != "running" { - started = true + if event.Container == nil { + log.Error().Interface("event", event).Msg("container update event with nil container") + } else { + started := false + updatedContainer, _ := s.containers.Compute(event.ActorID, func(c *Container, loaded bool) (*Container, bool) { + if loaded { + newContainer := event.Container + if newContainer.State == "running" && c.State != "running" { + started = true + } + c.Name = newContainer.Name + c.State = newContainer.State + c.Labels = newContainer.Labels + c.StartedAt = newContainer.StartedAt + c.FinishedAt = newContainer.FinishedAt + c.Created = newContainer.Created + c.Host = newContainer.Host + return c, false + } else { + return c, true } - c.Name = newContainer.Name - c.State = newContainer.State - c.Labels = newContainer.Labels - c.StartedAt = newContainer.StartedAt - c.FinishedAt = newContainer.FinishedAt - c.Created = newContainer.Created - c.Host = newContainer.Host - return c, false - } else { - return c, true - } - }) - - if started { - s.subscribers.Range(func(ctx context.Context, events chan<- ContainerEvent) bool { - select { - case events <- ContainerEvent{ - Name: "start", - ActorID: updatedContainer.ID, - Host: updatedContainer.Host, - }: - case <-ctx.Done(): - s.subscribers.Delete(ctx) - } - return true }) + if started { + s.subscribers.Range(func(ctx context.Context, events chan<- ContainerEvent) bool { + select { + case events <- ContainerEvent{ + Name: "start", + ActorID: updatedContainer.ID, + Host: updatedContainer.Host, + }: + case <-ctx.Done(): + s.subscribers.Delete(ctx) + } + return true + }) + } } case "die":