From 1dd0392aec6de3b1694dafd7e77f925fb13741bb Mon Sep 17 00:00:00 2001 From: Brett Brotherton Date: Mon, 21 Jul 2025 10:29:47 -0600 Subject: [PATCH] fix: #70 fix cleanup of buffers --- webcam.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/webcam.go b/webcam.go index bf72815..2449ce8 100644 --- a/webcam.go +++ b/webcam.go @@ -244,6 +244,7 @@ func (w *Webcam) StartStreaming() error { buffer, err := mmapQueryBuffer(w.fd, uint32(index), &length) if err != nil { + w.cleanupBuffers() return errors.New("Failed to map memory: " + string(err.Error())) } @@ -255,6 +256,7 @@ func (w *Webcam) StartStreaming() error { err := mmapEnqueueBuffer(w.fd, uint32(index)) if err != nil { + w.cleanupBuffers() return errors.New("Failed to enqueue buffer: " + string(err.Error())) } @@ -263,6 +265,7 @@ func (w *Webcam) StartStreaming() error { err = startStreaming(w.fd) if err != nil { + w.cleanupBuffers() return errors.New("Failed to start streaming: " + string(err.Error())) } w.streaming = true @@ -318,17 +321,18 @@ func (w *Webcam) WaitForFrame(timeout uint32) error { } } +func (w *Webcam) cleanupBuffers() { + for _, buffer := range w.buffers { + mmapReleaseBuffer(buffer) + } +} + func (w *Webcam) StopStreaming() error { if !w.streaming { return errors.New("Request to stop streaming when not streaming") } w.streaming = false - for _, buffer := range w.buffers { - err := mmapReleaseBuffer(buffer) - if err != nil { - return err - } - } + w.cleanupBuffers() return stopStreaming(w.fd) }