]> granicus.if.org Git - icinga2/commitdiff
Added some missing files.
authorGunnar Beutner <gunnar.beutner@netways.de>
Sun, 24 Feb 2013 07:27:00 +0000 (08:27 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Sun, 24 Feb 2013 07:27:00 +0000 (08:27 +0100)
lib/base/base.vcxproj
lib/base/objectlock.cpp [new file with mode: 0644]
lib/base/objectlock.h [new file with mode: 0644]

index 7f136821c7871e84628c700e1f1bbf9efb192f04..c115d746586cda2ae2336c9309302d398fccdb2b 100644 (file)
@@ -38,6 +38,7 @@
     <ClCompile Include="logger.cpp" />
     <ClCompile Include="netstring.cpp" />
     <ClCompile Include="object.cpp" />
+    <ClCompile Include="objectlock.cpp" />
     <ClCompile Include="process.cpp" />
     <ClCompile Include="process-unix.cpp" />
     <ClCompile Include="process-windows.cpp" />
@@ -79,6 +80,7 @@
     <ClInclude Include="exception.h" />
     <ClInclude Include="i2-base.h" />
     <ClInclude Include="object.h" />
+    <ClInclude Include="objectlock.h" />
     <ClInclude Include="process.h" />
     <ClInclude Include="ringbuffer.h" />
     <ClInclude Include="socket.h" />
diff --git a/lib/base/objectlock.cpp b/lib/base/objectlock.cpp
new file mode 100644 (file)
index 0000000..c511718
--- /dev/null
@@ -0,0 +1,52 @@
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/)        *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+#include "i2-base.h"
+
+using namespace icinga;
+
+ObjectLock::ObjectLock(void)
+       : m_Object(NULL), m_Lock()
+{ }
+
+ObjectLock::ObjectLock(const Object::Ptr& object)
+       : m_Object(object.get()), m_Lock()
+{
+       if (m_Object)
+               Lock();
+}
+
+ObjectLock::ObjectLock(const Object *object)
+       : m_Object(object), m_Lock()
+{
+       if (m_Object)
+               Lock();
+}
+
+void ObjectLock::Lock(void)
+{
+       assert(!m_Lock.owns_lock() && m_Object != NULL);
+
+       m_Lock = recursive_mutex::scoped_lock(m_Object->GetMutex());
+}
+
+void ObjectLock::Unlock(void)
+{
+       m_Lock = recursive_mutex::scoped_lock();
+}
diff --git a/lib/base/objectlock.h b/lib/base/objectlock.h
new file mode 100644 (file)
index 0000000..580439b
--- /dev/null
@@ -0,0 +1,45 @@
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/)        *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+#ifndef OBJECTLOCK_H
+#define OBJECTLOCK_H
+
+namespace icinga
+{
+
+/**
+ * A scoped lock for Objects.
+ */
+struct I2_BASE_API ObjectLock {
+public:
+       ObjectLock(void);
+       ObjectLock(const Object::Ptr& object);
+       ObjectLock(const Object *object);
+
+       void Lock(void);
+       void Unlock(void);
+
+private:
+       const Object *m_Object;
+       recursive_mutex::scoped_lock m_Lock;
+};
+
+}
+
+#endif /* OBJECTLOCK_H */