Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
1.2.x
-
None
-
This has been verified on the a recent master branch (pulled today) of (commit d8b39d905bb5f604e5bbc6b39fdee9d6b917f696) on KUbuntu and Harmattan.
Description
When using QtDbus as an IPC mechanism some methods types can not be called. For example the method:
ContextInfo ContextClient::contextTypeInfo(const QString& contextId) const
will not work, leading to a "can not be called" warning on the server side. It appears that only user-type arguments are considered during argument processing in the "int QServiceMetaObjectDBus::qt_metacall(QMetaObject::Call c, int id, void **a)" method. The first part of the attached patch is a hack that works around that issue.
Furthermore, in some cases (standard) return types appear to be ignored. For instance the following method:
RecordingInfoId ContextClient::addScheduledRecording(RecordingInfo recordinginfo);
leads to an "Internal error: Failed to deliver message" on the server side. Note that RecordingInfoId and QueryId are typedefs of QString so they are handled as standard return types. It seems that that QMetamethod::invoke(...) is called without the QGenericReturnArgument argument and hence the return value is not considered. The second and third part of the patch illustrate this. Obviously this is just a workaround for QString based return values and not suggested as a generic solution for this problem.