[RFC,v1,05/10] libcamera: egl: Add `resetEGLContext()`
diff mbox series

Message ID 20260804101949.353266-6-barnabas.pocze@ideasonboard.com
State Superseded
Headers show
Series
  • libcamera: software_isp: debayer_egl: Remove some leaks
Related show

Commit Message

Barnabás Pőcze Aug. 4, 2026, 10:19 a.m. UTC
Add a function that undoes the effects of `initEGLContext()`.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 include/libcamera/internal/egl.h |  1 +
 src/libcamera/egl.cpp            | 21 +++++++++++++++++----
 2 files changed, 18 insertions(+), 4 deletions(-)

Comments

Milan Zamazal Aug. 5, 2026, 10:13 a.m. UTC | #1
Barnabás Pőcze <barnabas.pocze@ideasonboard.com> writes:

> Add a function that undoes the effects of `initEGLContext()`.
>
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  include/libcamera/internal/egl.h |  1 +
>  src/libcamera/egl.cpp            | 21 +++++++++++++++++----
>  2 files changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h
> index fb77225ac4..e18bb91f4d 100644
> --- a/include/libcamera/internal/egl.h
> +++ b/include/libcamera/internal/egl.h
> @@ -103,6 +103,7 @@ public:
>  	~eGL();
>  
>  	int initEGLContext();
> +	void resetEGLContext();
>  	static EGLDisplay probeDisplay();
>  
>  	int createInputDMABufTexture2D(eGLImage &eglImage, int fd);
> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp
> index 3de5fab816..6b50e7bb77 100644
> --- a/src/libcamera/egl.cpp
> +++ b/src/libcamera/egl.cpp
> @@ -71,14 +71,13 @@ eGL::eGL(EGLDisplay display)
>  }
>  
>  /**
> - * \brief Destroy the EGL helper
> + * \brief Release all EGL resources
>   *
> - * Destroys the EGL context and surface if they were successfully created.
> + * Equivalent to calling resetEGLContext().

I would omit the implementation notice from the docstring completely,
and keep only the \brief part.  Either way:

Reviewed-by: Milan Zamazal <mzamazal@redhat.com>

>   */
>  eGL::~eGL()
>  {
> -	if (context_ != EGL_NO_CONTEXT)
> -		eglDestroyContext(display_, context_);
> +	resetEGLContext();
>  }
>  
>  /**
> @@ -436,6 +435,20 @@ fail:
>  	return -ENODEV;
>  }
>  
> +/**
> + * \brief Destroy the EGL context
> + *
> + * This function destroys the EGL context created by initEGLContext().
> + */
> +void eGL::resetEGLContext()
> +{
> +	if (context_ != EGL_NO_CONTEXT)
> +		eglDestroyContext(display_, std::exchange(context_, EGL_NO_CONTEXT));
> +
> +	tid_ = -1;
> +	vtable_ = {};
> +}
> +
>  /**
>   * \brief Make the EGL context current for the calling thread
>   *

Patch
diff mbox series

diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h
index fb77225ac4..e18bb91f4d 100644
--- a/include/libcamera/internal/egl.h
+++ b/include/libcamera/internal/egl.h
@@ -103,6 +103,7 @@  public:
 	~eGL();
 
 	int initEGLContext();
+	void resetEGLContext();
 	static EGLDisplay probeDisplay();
 
 	int createInputDMABufTexture2D(eGLImage &eglImage, int fd);
diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp
index 3de5fab816..6b50e7bb77 100644
--- a/src/libcamera/egl.cpp
+++ b/src/libcamera/egl.cpp
@@ -71,14 +71,13 @@  eGL::eGL(EGLDisplay display)
 }
 
 /**
- * \brief Destroy the EGL helper
+ * \brief Release all EGL resources
  *
- * Destroys the EGL context and surface if they were successfully created.
+ * Equivalent to calling resetEGLContext().
  */
 eGL::~eGL()
 {
-	if (context_ != EGL_NO_CONTEXT)
-		eglDestroyContext(display_, context_);
+	resetEGLContext();
 }
 
 /**
@@ -436,6 +435,20 @@  fail:
 	return -ENODEV;
 }
 
+/**
+ * \brief Destroy the EGL context
+ *
+ * This function destroys the EGL context created by initEGLContext().
+ */
+void eGL::resetEGLContext()
+{
+	if (context_ != EGL_NO_CONTEXT)
+		eglDestroyContext(display_, std::exchange(context_, EGL_NO_CONTEXT));
+
+	tid_ = -1;
+	vtable_ = {};
+}
+
 /**
  * \brief Make the EGL context current for the calling thread
  *