[icinga-checkins] icinga.org: icinga2/master: Added some missing files.

git at icinga.org git at icinga.org
Sun Feb 24 08:27:11 CET 2013


Module: icinga2
Branch: master
Commit: 022be22fa2d548fb4817f6e7b3f89dad22e605b1
URL:    https://git.icinga.org/?p=icinga2.git;a=commit;h=022be22fa2d548fb4817f6e7b3f89dad22e605b1

Author: Gunnar Beutner <gunnar.beutner at netways.de>
Date:   Sun Feb 24 08:27:00 2013 +0100

Added some missing files.

---

 lib/base/base.vcxproj   |    2 +
 lib/base/objectlock.cpp |   52 +++++++++++++++++++++++++++++++++++++++++++++++
 lib/base/objectlock.h   |   45 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 99 insertions(+), 0 deletions(-)

diff --git a/lib/base/base.vcxproj b/lib/base/base.vcxproj
index 7f13682..c115d74 100644
--- a/lib/base/base.vcxproj
+++ b/lib/base/base.vcxproj
@@ -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
index 0000000..c511718
--- /dev/null
+++ b/lib/base/objectlock.cpp
@@ -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
index 0000000..580439b
--- /dev/null
+++ b/lib/base/objectlock.h
@@ -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 */





More information about the icinga-checkins mailing list