mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-gtk: handle dispose more gracefully
This commit is contained in:
@ -64,15 +64,17 @@ static gboolean
|
|||||||
sysprof_normalized_series_update_missing (gpointer user_data)
|
sysprof_normalized_series_update_missing (gpointer user_data)
|
||||||
{
|
{
|
||||||
SysprofNormalizedSeries *self = user_data;
|
SysprofNormalizedSeries *self = user_data;
|
||||||
GListModel *model;
|
g_autoptr(GListModel) model = NULL;
|
||||||
|
g_autoptr(EggBitset) bitset = NULL;
|
||||||
EggBitsetIter iter;
|
EggBitsetIter iter;
|
||||||
guint position;
|
guint position;
|
||||||
|
|
||||||
g_assert (SYSPROF_IS_NORMALIZED_SERIES (self));
|
g_assert (SYSPROF_IS_NORMALIZED_SERIES (self));
|
||||||
|
|
||||||
model = G_LIST_MODEL (self);
|
model = g_object_ref (G_LIST_MODEL (self->series));
|
||||||
|
bitset = egg_bitset_ref (self->missing);
|
||||||
|
|
||||||
if (egg_bitset_iter_init_first (&iter, self->missing, &position))
|
if (egg_bitset_iter_init_first (&iter, bitset, &position))
|
||||||
{
|
{
|
||||||
gint64 deadline = g_get_monotonic_time () + SYSPROF_NORMALIZED_SERIES_STEP_TIME_USEC;
|
gint64 deadline = g_get_monotonic_time () + SYSPROF_NORMALIZED_SERIES_STEP_TIME_USEC;
|
||||||
guint first = position;
|
guint first = position;
|
||||||
@ -87,7 +89,7 @@ sysprof_normalized_series_update_missing (gpointer user_data)
|
|||||||
|
|
||||||
g_array_index (self->values, float, position) = _sysprof_axis_normalize (self->axis, &value);
|
g_array_index (self->values, float, position) = _sysprof_axis_normalize (self->axis, &value);
|
||||||
|
|
||||||
egg_bitset_remove (self->missing, position);
|
egg_bitset_remove (bitset, position);
|
||||||
|
|
||||||
g_value_unset (&value);
|
g_value_unset (&value);
|
||||||
g_clear_object (&item);
|
g_clear_object (&item);
|
||||||
@ -108,7 +110,7 @@ sysprof_normalized_series_update_missing (gpointer user_data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (egg_bitset_is_empty (self->missing))
|
if (egg_bitset_is_empty (bitset))
|
||||||
{
|
{
|
||||||
self->update_source = 0;
|
self->update_source = 0;
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
@ -127,7 +129,7 @@ sysprof_normalized_series_maybe_update (SysprofNormalizedSeries *self)
|
|||||||
if (self->update_source)
|
if (self->update_source)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (egg_bitset_is_empty (self->missing))
|
if (!self->missing || egg_bitset_is_empty (self->missing))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
source = g_idle_source_new ();
|
source = g_idle_source_new ();
|
||||||
@ -224,17 +226,27 @@ sysprof_normalized_series_dispose (GObject *object)
|
|||||||
SysprofNormalizedSeries *self = (SysprofNormalizedSeries *)object;
|
SysprofNormalizedSeries *self = (SysprofNormalizedSeries *)object;
|
||||||
|
|
||||||
g_clear_handle_id (&self->update_source, g_source_remove);
|
g_clear_handle_id (&self->update_source, g_source_remove);
|
||||||
|
|
||||||
g_clear_signal_handler (&self->range_changed_handler, self->axis);
|
g_clear_signal_handler (&self->range_changed_handler, self->axis);
|
||||||
g_clear_object (&self->axis);
|
|
||||||
|
|
||||||
|
g_clear_object (&self->axis);
|
||||||
g_clear_object (&self->series);
|
g_clear_object (&self->series);
|
||||||
|
|
||||||
g_clear_pointer (&self->expression, gtk_expression_unref);
|
g_clear_pointer (&self->expression, gtk_expression_unref);
|
||||||
|
|
||||||
|
egg_bitset_remove_all (self->missing);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (sysprof_normalized_series_parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_normalized_series_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
SysprofNormalizedSeries *self = (SysprofNormalizedSeries *)object;
|
||||||
|
|
||||||
g_clear_pointer (&self->missing, egg_bitset_unref);
|
g_clear_pointer (&self->missing, egg_bitset_unref);
|
||||||
g_clear_pointer (&self->values, g_array_unref);
|
g_clear_pointer (&self->values, g_array_unref);
|
||||||
|
|
||||||
G_OBJECT_CLASS (sysprof_normalized_series_parent_class)->dispose (object);
|
G_OBJECT_CLASS (sysprof_normalized_series_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -298,6 +310,7 @@ sysprof_normalized_series_class_init (SysprofNormalizedSeriesClass *klass)
|
|||||||
SysprofSeriesClass *series_class = SYSPROF_SERIES_CLASS (klass);
|
SysprofSeriesClass *series_class = SYSPROF_SERIES_CLASS (klass);
|
||||||
|
|
||||||
object_class->dispose = sysprof_normalized_series_dispose;
|
object_class->dispose = sysprof_normalized_series_dispose;
|
||||||
|
object_class->finalize = sysprof_normalized_series_finalize;
|
||||||
object_class->get_property = sysprof_normalized_series_get_property;
|
object_class->get_property = sysprof_normalized_series_get_property;
|
||||||
object_class->set_property = sysprof_normalized_series_set_property;
|
object_class->set_property = sysprof_normalized_series_set_property;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user