Fixed memory leak in IdleRegister::destroy

This commit is contained in:
Alberto Griggio
2017-04-28 21:22:23 +02:00
parent 5d4bd4b352
commit d8e0207b9a

View File

@@ -43,20 +43,25 @@ IdleRegister::~IdleRegister()
destroy();
}
namespace {
struct DataWrapper {
IdleRegister* const self;
GSourceFunc function;
gpointer data;
};
} // namespace
void IdleRegister::add(GSourceFunc function, gpointer data, gint priority)
{
struct DataWrapper {
IdleRegister* const self;
GSourceFunc function;
gpointer data;
};
const auto dispatch = [](gpointer data) -> gboolean {
DataWrapper* const data_wrapper = static_cast<DataWrapper*>(data);
if (!data_wrapper->function(data_wrapper->data)) {
data_wrapper->self->mutex.lock();
g_source_remove(data_wrapper->self->ids[data_wrapper]);
//g_source_remove(data_wrapper->self->ids[data_wrapper]);
data_wrapper->self->ids.erase(data_wrapper);
data_wrapper->self->mutex.unlock();
@@ -83,6 +88,8 @@ void IdleRegister::destroy()
mutex.lock();
for (const auto id : ids) {
g_source_remove(id.second);
DataWrapper *w = static_cast<DataWrapper *>(id.first);
delete w;
}
mutex.unlock();
}