diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-09-15 12:43:01 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-09-15 12:43:01 +0200 |
commit | 0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a (patch) | |
tree | 13f92f2fc02d346d8474ef03fd0596e3e0447eda /lib/Utils/CommLayerInner.cpp | |
parent | 5f4a56f97f36e9cb844fcf3e4399cea67000a6bb (diff) | |
download | abrt-0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a.tar.gz abrt-0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a.tar.xz abrt-0f91e9a06aa0f68a2cbe3c9fc4a858c0a5e6744a.zip |
unify CommLayer, MiddleWare and Utils into Utils
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib/Utils/CommLayerInner.cpp')
-rw-r--r-- | lib/Utils/CommLayerInner.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/Utils/CommLayerInner.cpp b/lib/Utils/CommLayerInner.cpp new file mode 100644 index 00000000..b5b8db78 --- /dev/null +++ b/lib/Utils/CommLayerInner.cpp @@ -0,0 +1,69 @@ +#include <pthread.h> +#include <map> +#include "abrtlib.h" +#include "CommLayerInner.h" + +static CObserver *s_pObs; + +typedef std::map<uint64_t, std::string> map_uint_str_t; +static map_uint_str_t s_mapClientID; +static pthread_mutex_t s_map_mutex; +static bool s_map_mutex_inited; + +void init_daemon_logging(CObserver *pObs) +{ + s_pObs = pObs; + if (!s_map_mutex_inited) + { + pthread_mutex_init(&s_map_mutex, NULL); + s_map_mutex_inited = true; + } +} + +void set_client_name(const char* name) +{ + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + if (!name) + s_mapClientID.erase(key); + else + s_mapClientID[key] = name; + pthread_mutex_unlock(&s_map_mutex); +} + +void warn_client(const std::string& pMessage) +{ + if (!s_pObs) + return; + + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + map_uint_str_t::const_iterator ki = s_mapClientID.find(key); + const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL); + pthread_mutex_unlock(&s_map_mutex); + + if (peer) + s_pObs->Warning(pMessage, peer, key); + else /* Bug: someone tries to warn_client() without set_client_name()!? */ + log("Hmm, stray %s: '%s'", __func__, pMessage.c_str()); +} + +void update_client(const std::string& pMessage) +{ + if (!s_pObs) + return; + + uint64_t key = uint64_t(pthread_self()); + + pthread_mutex_lock(&s_map_mutex); + map_uint_str_t::const_iterator ki = s_mapClientID.find(key); + const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL); + pthread_mutex_unlock(&s_map_mutex); + + if (peer) + s_pObs->Status(pMessage, peer, key); + else + log("Hmm, stray %s: '%s'", __func__, pMessage.c_str()); +} |