summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/bound_method.cpp23
-rw-r--r--src/libcamera/object.cpp6
2 files changed, 24 insertions, 5 deletions
diff --git a/src/libcamera/bound_method.cpp b/src/libcamera/bound_method.cpp
index 82339b7e..8e95c7ee 100644
--- a/src/libcamera/bound_method.cpp
+++ b/src/libcamera/bound_method.cpp
@@ -48,7 +48,22 @@ namespace libcamera {
* deadlock will occur.
*/
-void BoundMethodBase::activatePack(std::shared_ptr<BoundMethodPackBase> pack,
+/**
+ * \brief Invoke the bound method with packed arguments
+ * \param[in] pack Packed arguments
+ * \param[in] deleteMethod True to delete \a this bound method instance when
+ * method invocation completes
+ *
+ * The bound method stores its return value, if any, in the arguments \a pack.
+ * For direct and blocking invocations, this is performed synchronously, and
+ * the return value contained in the pack may be used. For queued invocations,
+ * the return value is stored at an undefined point of time and shall thus not
+ * be used by the caller.
+ *
+ * \return True if the return value contained in the \a pack may be used by the
+ * caller, false otherwise
+ */
+bool BoundMethodBase::activatePack(std::shared_ptr<BoundMethodPackBase> pack,
bool deleteMethod)
{
ConnectionType type = connectionType_;
@@ -65,13 +80,13 @@ void BoundMethodBase::activatePack(std::shared_ptr<BoundMethodPackBase> pack,
invokePack(pack.get());
if (deleteMethod)
delete this;
- break;
+ return true;
case ConnectionTypeQueued: {
std::unique_ptr<Message> msg =
utils::make_unique<InvokeMessage>(this, pack, nullptr, deleteMethod);
object_->postMessage(std::move(msg));
- break;
+ return false;
}
case ConnectionTypeBlocking: {
@@ -82,7 +97,7 @@ void BoundMethodBase::activatePack(std::shared_ptr<BoundMethodPackBase> pack,
object_->postMessage(std::move(msg));
semaphore.acquire();
- break;
+ return true;
}
}
}
diff --git a/src/libcamera/object.cpp b/src/libcamera/object.cpp
index e76faf48..21aad565 100644
--- a/src/libcamera/object.cpp
+++ b/src/libcamera/object.cpp
@@ -143,7 +143,7 @@ void Object::message(Message *msg)
}
/**
- * \fn void Object::invokeMethod()
+ * \fn R Object::invokeMethod()
* \brief Invoke a method asynchronously on an Object instance
* \param[in] func The object method to invoke
* \param[in] type Connection type for method invocation
@@ -156,6 +156,10 @@ void Object::message(Message *msg)
* Arguments \a args passed by value or reference are copied, while pointers
* are passed untouched. The caller shall ensure that any pointer argument
* remains valid until the method is invoked.
+ *
+ * \return For connection types ConnectionTypeDirect and
+ * ConnectionTypeBlocking, return the return value of the invoked method. For
+ * connection type ConnectionTypeQueued, return a default-constructed R value.
*/
/**