summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schanda <schanda@itestra.de>2013-07-10 10:31:03 +0200
committerJohannes Schanda <schanda@itestra.de>2013-07-10 10:31:03 +0200
commitbff36f780001d8b26a1eefddd8ee48894061a220 (patch)
tree2f87d99223cc2da46e8f3a4db0101a04a494cb2e
parent3ef7678c1dc69f9e3298632d6b41c07caf514918 (diff)
downloadgenivi-common-api-dbus-runtime-2.1-pre2.tar.gz
Check for illegal proxy builds in callbacks2.1-pre2
-rw-r--r--src/CommonAPI/DBus/DBusServiceRegistry.cpp17
-rw-r--r--src/CommonAPI/DBus/DBusServiceRegistry.h1
2 files changed, 13 insertions, 5 deletions
diff --git a/src/CommonAPI/DBus/DBusServiceRegistry.cpp b/src/CommonAPI/DBus/DBusServiceRegistry.cpp
index 0957485..13c28ab 100644
--- a/src/CommonAPI/DBus/DBusServiceRegistry.cpp
+++ b/src/CommonAPI/DBus/DBusServiceRegistry.cpp
@@ -15,7 +15,7 @@ namespace DBus {
DBusServiceRegistry::DBusServiceRegistry(std::shared_ptr<DBusProxyConnection> dbusProxyConnection):
dbusDaemonProxy_(std::make_shared<CommonAPI::DBus::DBusDaemonProxy>(dbusProxyConnection)),
dbusNameListStatus_(AvailabilityStatus::UNKNOWN),
- initialized_(false) {
+ initialized_(false), notificationThread_() {
}
DBusServiceRegistry::~DBusServiceRegistry() {
@@ -271,8 +271,13 @@ DBusServiceRegistry::Subscription DBusServiceRegistry::subscribeAvailabilityList
DBusAddressTranslator::getInstance().searchForDBusAddress(commonApiAddress, dbusInterfaceName, dbusServiceName, dbusObjectPath);
+ if (notificationThread_ == std::this_thread::get_id()) {
+ printf("You must not build proxies in callbacks of ProxyStatusEvent.\n"
+ "Refer to the documentation for suggestions how to avoid this.\n");
+ assert(false);
+ }
std::lock_guard<std::mutex> dbusServicesLock(dbusServicesMutex_);
-
+ notificationThread_ = std::this_thread::get_id();
DBusServiceList::iterator dbusServiceIterator = dbusServices_.find(dbusServiceName);
// Service not known, so just add it to the list of unkown or definitely not available services
@@ -331,7 +336,7 @@ DBusServiceRegistry::Subscription DBusServiceRegistry::subscribeAvailabilityList
}
break;
}
-
+ notificationThread_ = std::thread::id();
return listenerSubscription;
}
@@ -410,8 +415,9 @@ SubscriptionStatus DBusServiceRegistry::onDBusDaemonProxyNameOwnerChangedEvent(c
}
std::lock_guard<std::mutex> dbusServicesLock(dbusServicesMutex_);
-
+ notificationThread_ = std::this_thread::get_id();
onDBusServiceAvailabilityStatus(affectedName, dbusServiceAvailabilityStatus);
+ notificationThread_ = std::thread::id();
}
return SubscriptionStatus::RETAIN;
@@ -419,7 +425,7 @@ SubscriptionStatus DBusServiceRegistry::onDBusDaemonProxyNameOwnerChangedEvent(c
void DBusServiceRegistry::onListNamesCallback(const CommonAPI::CallStatus& callStatus, std::vector<std::string> dbusNames) {
std::lock_guard<std::mutex> dbusServicesLock(dbusServicesMutex_);
-
+ notificationThread_ = std::this_thread::get_id();
if (callStatus == CallStatus::SUCCESS) {
for (const std::string& dbusName : dbusNames) {
if (isDBusServiceName(dbusName)) {
@@ -440,6 +446,7 @@ void DBusServiceRegistry::onListNamesCallback(const CommonAPI::CallStatus& callS
dbusServiceIterator++;
}
}
+ notificationThread_ = std::thread::id();
}
diff --git a/src/CommonAPI/DBus/DBusServiceRegistry.h b/src/CommonAPI/DBus/DBusServiceRegistry.h
index fa40b9e..d7426bf 100644
--- a/src/CommonAPI/DBus/DBusServiceRegistry.h
+++ b/src/CommonAPI/DBus/DBusServiceRegistry.h
@@ -130,6 +130,7 @@ class DBusServiceRegistry: public std::enable_shared_from_this<DBusServiceRegist
std::condition_variable dbusServiceChanged_;
std::mutex dbusServicesMutex_;
+ std::thread::id notificationThread_;
bool initialized_;