summaryrefslogtreecommitdiffhomepage
path: root/options/connector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'options/connector.cpp')
-rw-r--r--options/connector.cpp54
1 files changed, 38 insertions, 16 deletions
diff --git a/options/connector.cpp b/options/connector.cpp
index ba460b1f..c1bbce39 100644
--- a/options/connector.cpp
+++ b/options/connector.cpp
@@ -1,3 +1,4 @@
+#include "compat/util.hpp"
#include "connector.hpp"
#include "value.hpp"
@@ -6,37 +7,58 @@ namespace detail {
connector::~connector() {}
-void connector::on_value_destructed(const QString& name, const base_value* val)
+bool connector::on_value_destructed_impl(const QString& name, const base_value* val)
{
QMutexLocker l(get_mtx());
- auto it = connected_values.find(name);
-
- bool ok = false;
+ const bool ok = progn(
+ auto it = connected_values.find(name);
- if (it != connected_values.end())
- {
- std::vector<const base_value*>& values = (*it).second;
- for (auto it = values.begin(); it != values.end(); it++)
+ if (it != connected_values.end())
{
- if (*it == val)
+ std::vector<const base_value*>& values = (*it).second;
+ for (auto it = values.begin(); it != values.end(); it++)
{
- values.erase(it);
- ok = true;
- break;
+ if (*it == val)
+ {
+ values.erase(it);
+ return true;
+ }
}
}
- }
+ return false;
+ );
+
+ return ok;
+}
+
+
+
+void connector::on_value_destructed(const QString& name, const base_value* val)
+{
+ const bool ok = on_value_destructed_impl(name, val);
if (!ok)
- qWarning() << "connector: bundle destructed without creating;"
- << "name" << name
- << "ptr" << quintptr(val);
+ qWarning() << "options/connector: value destructed without creating;"
+ << "bundle"
+ << (val && val->b ? val->b->name() : "<NULL>")
+ << "value-name" << name
+ << "value-ptr" << quintptr(val);
}
void connector::on_value_created(const QString& name, const base_value* val)
{
QMutexLocker l(get_mtx());
+
+ if (on_value_destructed_impl(name, val))
+ {
+ qWarning() << "options/connector: value created twice;"
+ << "bundle"
+ << (val && val->b ? val->b->name() : "<NULL>")
+ << "value-name" << name
+ << "value-ptr" << quintptr(val);
+ }
+
auto it = connected_values.find(name);
if (it != connected_values.end())