[libcamera-devel,v2,6/6] libcamera: MappedBuffer: Disable copy and assignment
diff mbox series

Message ID 20210211133444.764808-7-kieran.bingham@ideasonboard.com
State Accepted
Headers show
Series
  • Delete Copy-Move-Assign
Related show

Commit Message

Kieran Bingham Feb. 11, 2021, 1:34 p.m. UTC
Prevent copying and assignment of MappedBuffer types, which could invoke
undesired unmapping of mapped memory.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 include/libcamera/internal/buffer.h | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Laurent Pinchart Feb. 11, 2021, 9:22 p.m. UTC | #1
Hi Kieran,

Thank you for the patch.

On Thu, Feb 11, 2021 at 01:34:44PM +0000, Kieran Bingham wrote:
> Prevent copying and assignment of MappedBuffer types, which could invoke
> undesired unmapping of mapped memory.
> 
> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

I think the commit message isn't 100% right. As explained in
https://en.cppreference.com/w/cpp/language/copy_constructor, the
compiler will declare a copy constructor for the MappedBuffer class:

"If no user-defined copy constructors are provided for a class type
(struct, class, or union), the compiler will always declare a copy
constructor as a non-explicit inline public member of its class."

But that constructor will be deleted:

"The implicitly-declared or defaulted copy constructor for class T is
defined as deleted if any of the following conditions are true:
- ...
- T has a user-defined move constructor or move assignment operator
  (this condition only causes the implicitly-declared, not the
  defaulted, copy constructor to be deleted)."

so MappedBuffer can't currently be copied if I'm not mistaken. Still,
this should be made explicit
(https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rc-five)
so the patch is right.

With or without the commit message updated,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  include/libcamera/internal/buffer.h | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/include/libcamera/internal/buffer.h b/include/libcamera/internal/buffer.h
> index b7b0173f93f5..b980deaf58d5 100644
> --- a/include/libcamera/internal/buffer.h
> +++ b/include/libcamera/internal/buffer.h
> @@ -10,6 +10,7 @@
>  #include <sys/mman.h>
>  #include <vector>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/buffer.h>
>  #include <libcamera/span.h>
>  
> @@ -34,6 +35,9 @@ protected:
>  
>  	int error_;
>  	std::vector<Plane> maps_;
> +
> +private:
> +	LIBCAMERA_DISABLE_COPY(MappedBuffer);
>  };
>  
>  class MappedFrameBuffer : public MappedBuffer

Patch
diff mbox series

diff --git a/include/libcamera/internal/buffer.h b/include/libcamera/internal/buffer.h
index b7b0173f93f5..b980deaf58d5 100644
--- a/include/libcamera/internal/buffer.h
+++ b/include/libcamera/internal/buffer.h
@@ -10,6 +10,7 @@ 
 #include <sys/mman.h>
 #include <vector>
 
+#include <libcamera/class.h>
 #include <libcamera/buffer.h>
 #include <libcamera/span.h>
 
@@ -34,6 +35,9 @@  protected:
 
 	int error_;
 	std::vector<Plane> maps_;
+
+private:
+	LIBCAMERA_DISABLE_COPY(MappedBuffer);
 };
 
 class MappedFrameBuffer : public MappedBuffer