summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AudioManagerUtilities/include/CAmCommonAPIWrapper.h185
-rw-r--r--AudioManagerUtilities/include/CAmSocketHandler.h5
-rw-r--r--AudioManagerUtilities/src/CAmCommonAPIWrapper.cpp2
-rw-r--r--AudioManagerUtilities/src/CAmSocketHandler.cpp48
4 files changed, 119 insertions, 121 deletions
diff --git a/AudioManagerUtilities/include/CAmCommonAPIWrapper.h b/AudioManagerUtilities/include/CAmCommonAPIWrapper.h
index 82328d6..a83b5b3 100644
--- a/AudioManagerUtilities/include/CAmCommonAPIWrapper.h
+++ b/AudioManagerUtilities/include/CAmCommonAPIWrapper.h
@@ -133,24 +133,25 @@ public:
* @return Pointer to the socket handler.
*/
CAmSocketHandler *getSocketHandler() const { return mpSocketHandler; }
-#if COMMONAPI_VERSION_NUMBER >= 300
- /**
- * \brief Register stub objects.
- *
- * Example: std::shared_ptr<ConcreteStubClass> aStub;
- * registerService( aStub, "local", "com.your_company.instance_name", "service-name");
- *
- * @param shStub: Shared pointer to a stub instance
- * @param domain: A string with the domain name, usually "local"
- * @param instance: Common-api instance string as example "com.your_company.instance_name"
- * @param connectionId: A string connection id, which is used by CommonAPI to group applications
- *
- */
- template <class TStubImp> bool registerService(const std::shared_ptr<TStubImp> & shStub, const std::string & domain, const std::string & instance, const CommonAPI::ConnectionId_t & connectionId)
- {
- return mRuntime->registerService(domain, instance, shStub, connectionId);
- }
-#endif
+
+ /**
+ * \brief Deprecated method. This class is used only in single connection applications and no connectionId is needed. Instead you should use bool registerService(const std::shared_ptr<TStubImp> & shStub, const std::string & domain, const std::string & instance).
+ *
+ *
+ * Example: std::shared_ptr<ConcreteStubClass> aStub;
+ * registerService( aStub, "local", "com.your_company.instance_name", "service-name");
+ *
+ * @param shStub: Shared pointer to a stub instance
+ * @param domain: A string with the domain name, usually "local"
+ * @param instance: Common-api instance string as example "com.your_company.instance_name"
+ * @param connectionId: A string connection id, which is used by CommonAPI to group applications
+ *
+ */
+ template <class TStubImp> bool __attribute__((deprecated)) registerService(const std::shared_ptr<TStubImp> & shStub, const std::string & domain, const std::string & instance, const CommonAPI::ConnectionId_t __attribute__((__unused__)) & /*connectionId*/)
+ {
+ return mRuntime->registerService(domain, instance, shStub, mContext);
+ }
+
/**
* \brief Register stub objects.
*
@@ -181,61 +182,59 @@ public:
}
/**
- * \brief Deprecated method. Instead you should use bool registerService(const std::shared_ptr<TStubImp> & shStub, const std::string & domain, const std::string & instance).
- *
- * Register stub objects.
- *
- * Example: std::shared_ptr<ConcreteStubClass> aStub;
- * registerService( aStub, "local:com.your_company.interface_name:com.your_company.instance_name");
- *
- * @param shStub: Shared pointer to a stub instance
- * @param address: Complete common-api address as example "local:com.your_company.interface_name:com.your_company.instance_name"
- *
- */
- template <class TStubImp> bool __attribute__((deprecated)) registerStub(const std::shared_ptr<TStubImp> & shStub, const std::string & address)
- {
- std::vector<std::string> parts = CommonAPI::split(address, ':');
- assert(parts.size()==3);
-
- return registerService(shStub, parts[0], parts[2]);
- }
-
- /**
- * \brief Deprecated method. Instead you should use bool unregisterService(const std::string &domain, const std::string &interface, const std::string &instance).
- *
- * Unregister stub objects.
- *
- * @param address: Complete common-api address as example "local:com.your_company.interface_name:com.your_company.instance_name"
- *
- */
- bool __attribute__((deprecated)) unregisterStub(const std::string & address)
- {
- std::vector<std::string> parts = CommonAPI::split(address, ':');
- assert(parts.size()==3);
-
- return unregisterService(parts[0], parts[1], parts[2]);
- }
-
-#if COMMONAPI_VERSION_NUMBER >= 300
- /**
- * \brief Build proxy objects.
- *
- * Example: std::shared_ptr<AProxyClass<>> aProxy = buildProxy<AProxyClass>("local", "com.your_company.instance_name", "client-name");
- *
- * @param domain: A string with the domain name, usually "local"
- * @param instance: Common-api instance string as example "com.your_company.instance_name"
- * @param connectionId: A string connection id, which is used by CommonAPI to group applications
- *
- * @return A proxy object.
- */
- template<template<typename ...> class ProxyClass, typename ... AttributeExtensions>
- std::shared_ptr<ProxyClass<AttributeExtensions...>> buildProxy(const std::string &domain, const std::string &instance, const CommonAPI::ConnectionId_t & connectionId)
- {
- return mRuntime->buildProxy<ProxyClass>(domain, instance, connectionId);
- }
-#endif
-
- /**
+ * \brief Deprecated method. Instead you should use bool registerService(const std::shared_ptr<TStubImp> & shStub, const std::string & domain, const std::string & instance).
+ *
+ * Register stub objects.
+ *
+ * Example: std::shared_ptr<ConcreteStubClass> aStub;
+ * registerService( aStub, "local:com.your_company.interface_name:com.your_company.instance_name");
+ *
+ * @param shStub: Shared pointer to a stub instance
+ * @param address: Complete common-api address as example "local:com.your_company.interface_name:com.your_company.instance_name"
+ *
+ */
+ template <class TStubImp> bool __attribute__((deprecated)) registerStub(const std::shared_ptr<TStubImp> & shStub, const std::string & address)
+ {
+ std::vector<std::string> parts = CommonAPI::split(address, ':');
+ assert(parts.size()==3);
+
+ return registerService(shStub, parts[0], parts[2]);
+ }
+
+ /**
+ * \brief Deprecated method. Instead you should use bool unregisterService(const std::string &domain, const std::string &interface, const std::string &instance).
+ *
+ * Unregister stub objects.
+ *
+ * @param address: Complete common-api address as example "local:com.your_company.interface_name:com.your_company.instance_name"
+ *
+ */
+ bool __attribute__((deprecated)) unregisterStub(const std::string & address)
+ {
+ std::vector<std::string> parts = CommonAPI::split(address, ':');
+ assert(parts.size()==3);
+
+ return unregisterService(parts[0], parts[1], parts[2]);
+ }
+
+ /**
+ * \brief Deprecated method. This class is used only in single connection applications and no connectionId is needed. Instead you should use buildProxy(const std::string &domain, const std::string &instance).
+ *
+ * Example: std::shared_ptr<AProxyClass<>> aProxy = buildProxy<AProxyClass>("local", "com.your_company.instance_name", "client-name");
+ *
+ * @param domain: A string with the domain name, usually "local"
+ * @param instance: Common-api instance string as example "com.your_company.instance_name"
+ * @param connectionId: A string connection id, which is used by CommonAPI to group applications
+ *
+ * @return A proxy object.
+ */
+ template<template<typename ...> class ProxyClass, typename ... AttributeExtensions>
+ std::shared_ptr<ProxyClass<AttributeExtensions...>> __attribute__((deprecated)) buildProxy(const std::string &domain, const std::string &instance, const CommonAPI::ConnectionId_t __attribute__((__unused__)) & /*connectionId*/)
+ {
+ return mRuntime->buildProxy<ProxyClass>(domain, instance, mContext);
+ }
+
+ /**
* \brief Build proxy objects.
*
* Example: std::shared_ptr<AProxyClass<>> aProxy = buildProxy<AProxyClass>("local", "com.your_company.instance_name");
@@ -250,26 +249,26 @@ public:
{
return mRuntime->buildProxy<ProxyClass>(domain, instance, mContext);
}
-
-
- /**
- * \brief Deprecated method. Instead you should use buildProxy(const std::string &domain, const std::string &instance).
- *
- * Build proxy objects.
- * Example: std::shared_ptr<AProxyClass<>> aProxy = buildProxy<AProxyClass>("local:com.your_company.interface_name:com.your_company.instance_name");
- *
- * @param address: Complete common-api address as example "local:com.your_company.interface_name:com.your_company.instance_name"
- *
- * @return A proxy object.
- */
- template<template<typename ...> class ProxyClass, typename ... AttributeExtensions>
- std::shared_ptr<ProxyClass<AttributeExtensions...>> __attribute__((deprecated)) buildProxy(const std::string & address)
- {
- std::vector<std::string> parts=CommonAPI::split(address, ':');
- assert(parts.size()==3);
-
- return buildProxy<ProxyClass>(parts[0], parts[2]);
- }
+
+
+ /**
+ * \brief Deprecated method. Instead you should use buildProxy(const std::string &domain, const std::string &instance).
+ *
+ * Build proxy objects.
+ * Example: std::shared_ptr<AProxyClass<>> aProxy = buildProxy<AProxyClass>("local:com.your_company.interface_name:com.your_company.instance_name");
+ *
+ * @param address: Complete common-api address as example "local:com.your_company.interface_name:com.your_company.instance_name"
+ *
+ * @return A proxy object.
+ */
+ template<template<typename ...> class ProxyClass, typename ... AttributeExtensions>
+ std::shared_ptr<ProxyClass<AttributeExtensions...>> __attribute__((deprecated)) buildProxy(const std::string & address)
+ {
+ std::vector<std::string> parts=CommonAPI::split(address, ':');
+ assert(parts.size()==3);
+
+ return buildProxy<ProxyClass>(parts[0], parts[2]);
+ }
};
diff --git a/AudioManagerUtilities/include/CAmSocketHandler.h b/AudioManagerUtilities/include/CAmSocketHandler.h
index 6163b3c..8809a30 100644
--- a/AudioManagerUtilities/include/CAmSocketHandler.h
+++ b/AudioManagerUtilities/include/CAmSocketHandler.h
@@ -305,14 +305,13 @@ class CAmSocketHandler
internal_codes_t mInternalCodes;
sh_pollHandle_t mSignalFdHandle;
VectorListPoll_t mListActivePolls;
+ const std::thread::id mThreadID; //!< Socket handler thread id used to check if the calls come from the same thread
#ifndef WITH_TIMERFD
timespec mStartTime; //!<here the actual time is saved for timecorrection
#endif
private:
- static void checkCallerThreadId(void);
-
bool fdIsValid(const int fd) const;
timespec* insertTime(timespec& buffertime);
@@ -500,8 +499,6 @@ public:
void exit_mainloop();
bool fatalErrorOccurred();
-
- static const std::thread::id SOCKETHANDLER_THREAD_ID;
};
} /* namespace am */
diff --git a/AudioManagerUtilities/src/CAmCommonAPIWrapper.cpp b/AudioManagerUtilities/src/CAmCommonAPIWrapper.cpp
index 2aa8370..126b649 100644
--- a/AudioManagerUtilities/src/CAmCommonAPIWrapper.cpp
+++ b/AudioManagerUtilities/src/CAmCommonAPIWrapper.cpp
@@ -156,7 +156,7 @@ void CAmCommonAPIWrapper::commonFireCallback(const pollfd pollfd, const sh_pollH
return;
}
- mWatchToCheck->dispatch(pollfd.events);
+ mWatchToCheck->dispatch(pollfd.revents);
}
void CAmCommonAPIWrapper::commonPrepareCallback(const sh_pollHandle_t, void*)
diff --git a/AudioManagerUtilities/src/CAmSocketHandler.cpp b/AudioManagerUtilities/src/CAmSocketHandler.cpp
index 2a49770..6809902 100644
--- a/AudioManagerUtilities/src/CAmSocketHandler.cpp
+++ b/AudioManagerUtilities/src/CAmSocketHandler.cpp
@@ -43,8 +43,15 @@
namespace am
{
-const std::thread::id CAmSocketHandler::SOCKETHANDLER_THREAD_ID = std::this_thread::get_id();
-
+#define CHECK_CALLER_THREAD_ID()\
+ if(std::this_thread::get_id() != mThreadID)\
+ {\
+ logError("Sockethandler: Call from another thread detected!");\
+ assert(false);\
+ }
+
+
+
CAmSocketHandler::CAmSocketHandler() :
mPipe(), //
@@ -63,7 +70,8 @@ CAmSocketHandler::CAmSocketHandler() :
mRecreatePollfds(true),
mInternalCodes(internal_codes_e::NO_ERROR),
mSignalFdHandle(0),
- mListActivePolls()
+ mListActivePolls(),
+ mThreadID(std::this_thread::get_id())
#ifndef WITH_TIMERFD
,mStartTime() //
#endif
@@ -106,7 +114,7 @@ void CAmSocketHandler::start_listenting()
mDispatchDone = false;
int16_t pollStatus;
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
#ifndef WITH_TIMERFD
clock_gettime(CLOCK_MONOTONIC, &mStartTime);
@@ -181,6 +189,8 @@ void CAmSocketHandler::start_listenting()
listPoll.push_back(&pollObj);
CAmSocketHandler::fire(&pollObj);
+
+ itMfdPollingArray->revents = 0;
}
}
@@ -259,7 +269,7 @@ am_Error_e CAmSocketHandler::getFDPollData(const sh_pollHandle_t handle, sh_poll
*/
am_Error_e CAmSocketHandler::listenToSignals(const std::vector<uint8_t> & listSignals)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
int fdErr;
uint8_t addedSignals = 0;
@@ -374,7 +384,7 @@ am_Error_e CAmSocketHandler::addFDPoll(const int fd,
void* userData,
sh_pollHandle_t& handle)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
if (!fdIsValid(fd))
return (E_NON_EXISTENT);
@@ -445,7 +455,7 @@ am::am_Error_e CAmSocketHandler::addFDPoll(const int fd, const short event, IAmS
*/
am_Error_e CAmSocketHandler::removeFDPoll(const sh_pollHandle_t handle)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
VectorListPoll_t::iterator iterator = mListPoll.begin();
@@ -485,7 +495,7 @@ am_Error_e CAmSocketHandler::removeFDPoll(const sh_pollHandle_t handle)
*/
am_Error_e CAmSocketHandler::addSignalHandler(std::function<void(const sh_pollHandle_t handle, const signalfd_siginfo & info, void* userData)> callback, sh_pollHandle_t& handle, void * userData)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
if (!nextHandle(mSetSignalhandlerKeys))
{
@@ -509,7 +519,7 @@ am_Error_e CAmSocketHandler::addSignalHandler(std::function<void(const sh_pollHa
*/
am_Error_e CAmSocketHandler::removeSignalHandler(const sh_pollHandle_t handle)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
VectorSignalHandlers_t::iterator it(mSignalHandlers.begin());
for (; it != mSignalHandlers.end(); ++it)
@@ -548,7 +558,7 @@ am_Error_e CAmSocketHandler::addTimer(const timespec & timeouts, IAmShTimerCallB
am_Error_e CAmSocketHandler::addTimer(const timespec & timeouts, std::function<void(const sh_timerHandle_t handle, void* userData)> callback, sh_timerHandle_t& handle, void * userData, const bool repeats)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
assert(!((timeouts.tv_sec == 0) && (timeouts.tv_nsec == 0)));
mListTimer.emplace_back();
@@ -642,7 +652,7 @@ am_Error_e CAmSocketHandler::addTimer(const timespec & timeouts, std::function<v
*/
am_Error_e CAmSocketHandler::removeTimer(const sh_timerHandle_t handle)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
assert(handle != 0);
//stop the current timer
@@ -685,7 +695,7 @@ am_Error_e CAmSocketHandler::removeTimer(const sh_timerHandle_t handle)
*/
am_Error_e CAmSocketHandler::updateTimer(const sh_timerHandle_t handle, const timespec & timeouts)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
#ifdef WITH_TIMERFD
std::list<sh_timer_s>::iterator it = mListTimer.begin();
@@ -771,7 +781,7 @@ am_Error_e CAmSocketHandler::updateTimer(const sh_timerHandle_t handle, const ti
*/
am_Error_e CAmSocketHandler::restartTimer(const sh_timerHandle_t handle)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
#ifdef WITH_TIMERFD
std::list<sh_timer_s>::iterator it = mListTimer.begin();
for (; it != mListTimer.end(); ++it)
@@ -850,7 +860,7 @@ am_Error_e CAmSocketHandler::restartTimer(const sh_timerHandle_t handle)
*/
am_Error_e CAmSocketHandler::stopTimer(const sh_timerHandle_t handle)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
#ifdef WITH_TIMERFD
std::list<sh_timer_s>::iterator it = mListTimer.begin();
for (; it != mListTimer.end(); ++it)
@@ -897,7 +907,7 @@ am_Error_e CAmSocketHandler::stopTimer(const sh_timerHandle_t handle)
*/
am_Error_e CAmSocketHandler::updateEventFlags(const sh_pollHandle_t handle, const short events)
{
- checkCallerThreadId();
+ CHECK_CALLER_THREAD_ID()
VectorListPoll_t::iterator iterator = mListPoll.begin();
for (; iterator != mListPoll.end(); ++iterator)
@@ -912,14 +922,6 @@ am_Error_e CAmSocketHandler::updateEventFlags(const sh_pollHandle_t handle, cons
return (E_UNKNOWN);
}
-void CAmSocketHandler::checkCallerThreadId(void)
-{
- bool bSameThread = (std::this_thread::get_id() == CAmSocketHandler::SOCKETHANDLER_THREAD_ID);
- if(!bSameThread)
- logError("Sockethandler: Call from another thread detected!");
- assert(bSameThread);
-}
-
/**
* checks if a filedescriptor is validCAmShSubstractTime
* @param fd the filedescriptor