From 6bdb33ff3a6134bc01e56a78f2673cc81cd3a1dd Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 25 Oct 2022 16:37:30 +0200 Subject: [PATCH] Fix buffer leakage on camera reconnect --- device/camera/camera.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/device/camera/camera.c b/device/camera/camera.c index ea6af1a..6ff080d 100644 --- a/device/camera/camera.c +++ b/device/camera/camera.c @@ -41,15 +41,22 @@ void camera_close(camera_t **camerap) *camerap = NULL; for (int i = MAX_DEVICES; i-- > 0; ) { - if (camera->devices[i]) { - device_close(camera->devices[i]); - camera->devices[i] = NULL; + link_t *link = &camera->links[i]; + + if (link->callbacks.on_buffer) { + link->callbacks.on_buffer(NULL); + link->callbacks.on_buffer = NULL; + } + if (link->callbacks.buf_lock) { + buffer_lock_capture(link->callbacks.buf_lock, NULL); + link->callbacks.buf_lock = NULL; } } for (int i = MAX_DEVICES; i-- > 0; ) { - if (camera->links[i].callbacks.on_buffer) { - camera->links[i].callbacks.on_buffer = NULL; + if (camera->devices[i]) { + device_close(camera->devices[i]); + camera->devices[i] = NULL; } }