IdleRegister cleanups

This commit is contained in:
Flössie 2017-05-02 18:45:23 +02:00
parent 7553d86b11
commit bc33b51093
2 changed files with 9 additions and 16 deletions

View File

@ -43,17 +43,6 @@ IdleRegister::~IdleRegister()
destroy(); destroy();
} }
namespace {
struct DataWrapper {
IdleRegister* const self;
GSourceFunc function;
gpointer data;
};
} // namespace
void IdleRegister::add(GSourceFunc function, gpointer data, gint priority) void IdleRegister::add(GSourceFunc function, gpointer data, gint priority)
{ {
const auto dispatch = [](gpointer data) -> gboolean { const auto dispatch = [](gpointer data) -> gboolean {
@ -61,7 +50,6 @@ void IdleRegister::add(GSourceFunc function, gpointer data, gint priority)
if (!data_wrapper->function(data_wrapper->data)) { if (!data_wrapper->function(data_wrapper->data)) {
data_wrapper->self->mutex.lock(); data_wrapper->self->mutex.lock();
//g_source_remove(data_wrapper->self->ids[data_wrapper]);
data_wrapper->self->ids.erase(data_wrapper); data_wrapper->self->ids.erase(data_wrapper);
data_wrapper->self->mutex.unlock(); data_wrapper->self->mutex.unlock();
@ -86,10 +74,9 @@ void IdleRegister::add(GSourceFunc function, gpointer data, gint priority)
void IdleRegister::destroy() void IdleRegister::destroy()
{ {
mutex.lock(); mutex.lock();
for (const auto id : ids) { for (const auto& id : ids) {
g_source_remove(id.second); g_source_remove(id.second);
DataWrapper *w = static_cast<DataWrapper *>(id.first); delete id.first;
delete w;
} }
ids.clear(); ids.clear();
mutex.unlock(); mutex.unlock();

View File

@ -54,7 +54,13 @@ public:
void destroy(); void destroy();
private: private:
std::map<void*, guint> ids; struct DataWrapper {
IdleRegister* const self;
GSourceFunc function;
gpointer data;
};
std::map<const DataWrapper*, guint> ids;
MyMutex mutex; MyMutex mutex;
}; };