summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2010-06-09 20:29:32 +0000
committerAlan Conway <aconway@apache.org>2010-06-09 20:29:32 +0000
commit1951f9cf0c246b53d1cddf65dfdb059ad8662377 (patch)
tree2a8862e880777b61ecaae29bc335f18ade5c18c5 /cpp/src/qpid/sys
parent81763331d2256790538f7003e8b98a9fee802881 (diff)
downloadqpid-python-1951f9cf0c246b53d1cddf65dfdb059ad8662377.tar.gz
Fix cluster-safe assertion in connection negotiation.
See https://bugzilla.redhat.com/show_bug.cgi?id=602347. In a cluster, raise the management connect event when processing cluster.announce. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@953147 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys')
-rw-r--r--cpp/src/qpid/sys/ClusterSafe.cpp6
-rw-r--r--cpp/src/qpid/sys/ClusterSafe.h17
2 files changed, 21 insertions, 2 deletions
diff --git a/cpp/src/qpid/sys/ClusterSafe.cpp b/cpp/src/qpid/sys/ClusterSafe.cpp
index 498a46d865..e051591afd 100644
--- a/cpp/src/qpid/sys/ClusterSafe.cpp
+++ b/cpp/src/qpid/sys/ClusterSafe.cpp
@@ -32,8 +32,12 @@ bool inCluster = false;
QPID_TSS bool inContext = false;
}
+bool isClusterSafe() { return !inCluster || inContext; }
+
+bool isCluster() { return inCluster; }
+
void assertClusterSafe() {
- if (inCluster && !inContext) {
+ if (!isClusterSafe()) {
QPID_LOG(critical, "Modified cluster state outside of cluster context");
::abort();
}
diff --git a/cpp/src/qpid/sys/ClusterSafe.h b/cpp/src/qpid/sys/ClusterSafe.h
index abb9ad0fff..f3382307d0 100644
--- a/cpp/src/qpid/sys/ClusterSafe.h
+++ b/cpp/src/qpid/sys/ClusterSafe.h
@@ -42,6 +42,20 @@ namespace sys {
QPID_COMMON_EXTERN void assertClusterSafe();
/**
+ * In a non-clustered broker, returns true.
+ *
+ * In a clustered broker returns true if we are in a context where it
+ * is safe to modify cluster state.
+ *
+ * This function is in the common library rather than the cluster
+ * library because it is called by code in the broker library.
+ */
+QPID_COMMON_EXTERN bool isClusterSafe();
+
+/** Return true in a clustered broker */
+QPID_COMMON_EXTERN bool isCluster();
+
+/**
* Base class for classes that encapsulate state which is replicated
* to all members of a cluster. Acts as a marker for clustered state
* and provides functions to assist detecting bugs in cluster
@@ -53,7 +67,8 @@ struct ClusterSafeScope {
};
/**
- * Enable cluster-safe assertions. By defaul they are no-ops.
+ * Enable cluster-safe assertions. By default they are no-ops.
+ * Called by cluster code.
*/
void enableClusterSafe();