[libcamera-devel] [PATCH v2 6/9] libcamera: object: Use bound method activePack() for invokeMethod()
Niklas Söderlund
niklas.soderlund at ragnatech.se
Tue Oct 29 15:44:24 CET 2019
Hi Laurent,
Thanks for your work.
On 2019-10-28 12:49:10 +0200, Laurent Pinchart wrote:
> The BoundMethodBase::activatePack() and the internal
> Object::invokeMethod() are duplicate implementation of the same
> mechanism. Use the former to replace the latter.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> include/libcamera/bound_method.h | 4 ++--
> include/libcamera/object.h | 8 ++++----
> src/libcamera/bound_method.cpp | 6 +++---
> src/libcamera/object.cpp | 7 -------
> 4 files changed, 9 insertions(+), 16 deletions(-)
>
> diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h
> index 06c5a3b12305..bdeb5469cda3 100644
> --- a/include/libcamera/bound_method.h
> +++ b/include/libcamera/bound_method.h
> @@ -37,7 +37,7 @@ public:
> Object *object() const { return object_; }
> ConnectionType connectionType() const { return connectionType_; }
>
> - void activatePack(void *pack);
> + void activatePack(void *pack, bool deleteMethod);
> virtual void invokePack(void *pack) = 0;
>
> protected:
> @@ -109,7 +109,7 @@ public:
> void activate(Args... args)
> {
> if (this->object_)
> - BoundMethodBase::activatePack(new PackType{ args... });
> + BoundMethodBase::activatePack(new PackType{ args... }, false);
> else
> (static_cast<T *>(this->obj_)->*func_)(args...);
> }
> diff --git a/include/libcamera/object.h b/include/libcamera/object.h
> index 3308330af857..603a229288c2 100644
> --- a/include/libcamera/object.h
> +++ b/include/libcamera/object.h
> @@ -33,10 +33,12 @@ public:
> void invokeMethod(void (T::*func)(Args...), Args... args)
> {
> T *obj = static_cast<T *>(this);
> - BoundMethodBase *method = new BoundMemberMethod<T, Args...>(obj, this, func);
> + BoundMethodBase *method =
> + new BoundMemberMethod<T, Args...>(obj, this, func,
> + ConnectionTypeQueued);
> void *pack = new typename BoundMemberMethod<T, Args...>::PackType{ args... };
>
> - invokeMethod(method, pack);
> + method->activatePack(pack, true);
> }
>
> Thread *thread() const { return thread_; }
> @@ -53,8 +55,6 @@ private:
> friend class BoundMethodBase;
> friend class Thread;
>
> - void invokeMethod(BoundMethodBase *method, void *pack);
> -
> void notifyThreadMove();
>
> void connect(SignalBase *signal);
> diff --git a/src/libcamera/bound_method.cpp b/src/libcamera/bound_method.cpp
> index 600717363444..4c0cd415a3f1 100644
> --- a/src/libcamera/bound_method.cpp
> +++ b/src/libcamera/bound_method.cpp
> @@ -48,7 +48,7 @@ namespace libcamera {
> * deadlock will occur.
> */
>
> -void BoundMethodBase::activatePack(void *pack)
> +void BoundMethodBase::activatePack(void *pack, bool deleteMethod)
> {
> ConnectionType type = connectionType_;
> if (type == ConnectionTypeAuto) {
> @@ -66,7 +66,7 @@ void BoundMethodBase::activatePack(void *pack)
>
> case ConnectionTypeQueued: {
> std::unique_ptr<Message> msg =
> - utils::make_unique<InvokeMessage>(this, pack);
> + utils::make_unique<InvokeMessage>(this, pack, nullptr, deleteMethod);
> object_->postMessage(std::move(msg));
> break;
> }
> @@ -75,7 +75,7 @@ void BoundMethodBase::activatePack(void *pack)
> Semaphore semaphore;
>
> std::unique_ptr<Message> msg =
> - utils::make_unique<InvokeMessage>(this, pack, &semaphore);
> + utils::make_unique<InvokeMessage>(this, pack, &semaphore, deleteMethod);
> object_->postMessage(std::move(msg));
>
> semaphore.acquire();
> diff --git a/src/libcamera/object.cpp b/src/libcamera/object.cpp
> index b0818f9aa25f..509b2ebac537 100644
> --- a/src/libcamera/object.cpp
> +++ b/src/libcamera/object.cpp
> @@ -153,13 +153,6 @@ void Object::message(Message *msg)
> * remains valid until the method is invoked.
> */
>
> -void Object::invokeMethod(BoundMethodBase *method, void *args)
> -{
> - std::unique_ptr<Message> msg =
> - utils::make_unique<InvokeMessage>(method, args, nullptr, true);
> - postMessage(std::move(msg));
> -}
> -
> /**
> * \fn Object::thread()
> * \brief Retrieve the thread the object is bound to
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list