https://issues.apache.org/jira/browse/AMQCPP-527
work around bad Microsoft STL Map impls.
diff --git a/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h b/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h
index 087c069..05fdd91 100644
--- a/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h
+++ b/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h
@@ -774,8 +774,10 @@
typename std::map<K, V, COMPARATOR>::const_iterator iter;
synchronized(&mutex) {
- iter = valueMap.find(key);
- return iter != valueMap.end();
+ if (!valueMap.empty()) {
+ iter = valueMap.find(key);
+ return iter != valueMap.end();
+ }
}
return false;
@@ -829,9 +831,11 @@
virtual V& get(const K& key) {
typename std::map<K,V,COMPARATOR>::iterator iter;
synchronized(&mutex) {
- iter = valueMap.find(key);
- if (iter != valueMap.end()) {
- return iter->second;
+ if (!valueMap.empty()) {
+ iter = valueMap.find(key);
+ if (iter != valueMap.end()) {
+ return iter->second;
+ }
}
}
@@ -845,9 +849,11 @@
virtual const V& get(const K& key) const {
typename std::map<K,V,COMPARATOR>::const_iterator iter;
synchronized(&mutex) {
- iter = valueMap.find(key);
- if (iter != valueMap.end()) {
- return iter->second;
+ if (!valueMap.empty()) {
+ iter = valueMap.find(key);
+ if (iter != valueMap.end()) {
+ return iter->second;
+ }
}
}
@@ -916,13 +922,15 @@
virtual V remove(const K& key) {
V result = V();
synchronized(&mutex) {
- typename std::map<K, V, COMPARATOR>::iterator iter = valueMap.find(key);
- if (iter == valueMap.end()) {
- return result;
+ if (!valueMap.empty()) {
+ typename std::map<K, V, COMPARATOR>::iterator iter = valueMap.find(key);
+ if (iter == valueMap.end()) {
+ return result;
+ }
+ result = iter->second;
+ valueMap.erase(iter);
+ modCount++;
}
- result = iter->second;
- valueMap.erase(iter);
- modCount++;
}
return result;