Message ID | 20191028104913.14985-7-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
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@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@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@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
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
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@ideasonboard.com> --- 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(-)