]> granicus.if.org Git - icinga2/commitdiff
Fix {Host,Service,User}Group::{Add,Remove}Member isn't thread-safe.
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 11 Mar 2014 09:40:37 +0000 (10:40 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 11 Mar 2014 09:40:37 +0000 (10:40 +0100)
Fixes #5699

lib/icinga/hostgroup.cpp
lib/icinga/hostgroup.h
lib/icinga/servicegroup.cpp
lib/icinga/servicegroup.h
lib/icinga/usergroup.cpp
lib/icinga/usergroup.h

index a029f57a8b1f62eb6893b31158c23283dd65ab58..03859f79884e785e88f1d606f6bd797218c5dea5 100644 (file)
@@ -31,15 +31,18 @@ REGISTER_TYPE(HostGroup);
 
 std::set<Host::Ptr> HostGroup::GetMembers(void) const
 {
+       boost::mutex::scoped_lock lock(m_HostGroupMutex);
        return m_Members;
 }
 
 void HostGroup::AddMember(const Host::Ptr& host)
 {
+       boost::mutex::scoped_lock lock(m_HostGroupMutex);
        m_Members.insert(host);
 }
 
 void HostGroup::RemoveMember(const Host::Ptr& host)
 {
+       boost::mutex::scoped_lock lock(m_HostGroupMutex);
        m_Members.erase(host);
 }
index abe42cdafe0d1bcd77e23d3018fa8e149ee73abe..82b29eef795ec8c891d4e7f508925175fc0d7f45 100644 (file)
@@ -43,6 +43,7 @@ public:
        void RemoveMember(const Host::Ptr& host);
 
 private:
+       mutable boost::mutex m_HostGroupMutex;
        std::set<Host::Ptr> m_Members;
 };
 
index fedfe6f0f755487f569d9bcd3a05c51284c917e9..5752aab0df5343a3573dcd7beb3cade5300df000 100644 (file)
@@ -32,15 +32,18 @@ REGISTER_TYPE(ServiceGroup);
 
 std::set<Service::Ptr> ServiceGroup::GetMembers(void) const
 {
+       boost::mutex::scoped_lock lock(m_ServiceGroupMutex);
        return m_Members;
 }
 
 void ServiceGroup::AddMember(const Service::Ptr& service)
 {
+       boost::mutex::scoped_lock lock(m_ServiceGroupMutex);
        m_Members.insert(service);
 }
 
 void ServiceGroup::RemoveMember(const Service::Ptr& service)
 {
+       boost::mutex::scoped_lock lock(m_ServiceGroupMutex);
        m_Members.erase(service);
 }
index 0ee2fbfae48dc8b5813a42fdbbff7dce60e6629a..1bb5a2b605843767dcc72460e7195789d7f570ef 100644 (file)
@@ -43,6 +43,7 @@ public:
        void RemoveMember(const Service::Ptr& service);
 
 private:
+       mutable boost::mutex m_ServiceGroupMutex;
        std::set<Service::Ptr> m_Members;
 };
 
index 8233bed05c8de886ef763acd831cf7036eddac80..b5d3db24e0f1be7a5da300209e313dd95dec8fdf 100644 (file)
@@ -31,15 +31,18 @@ REGISTER_TYPE(UserGroup);
 
 std::set<User::Ptr> UserGroup::GetMembers(void) const
 {
+       boost::mutex::scoped_lock lock(m_UserGroupMutex);
        return m_Members;
 }
 
 void UserGroup::AddMember(const User::Ptr& user)
 {
+       boost::mutex::scoped_lock lock(m_UserGroupMutex);
        m_Members.insert(user);
 }
 
 void UserGroup::RemoveMember(const User::Ptr& user)
 {
+       boost::mutex::scoped_lock lock(m_UserGroupMutex);
        m_Members.erase(user);
 }
index e7b1566ffb7edbae324df6a1ddc1c7bb6c477146..5834fa9a2c0071a0b1ed9eebdc06c3e400060117 100644 (file)
@@ -43,6 +43,7 @@ public:
        void RemoveMember(const User::Ptr& user);
 
 private:
+       mutable boost::mutex m_UserGroupMutex;
        std::set<User::Ptr> m_Members;
 };