From e9995a70b1ff951cca3471894db2c289d9b0e4f9 Mon Sep 17 00:00:00 2001 From: Adric Blake Date: Fri, 1 Sep 2023 21:30:19 -0400 Subject: Remove weak pointers on dispose A weak pointer has a callback that will happily overwrite freed object memory if the weakly referenced object outlives the object storing the reference. Remove those callbacks when they are no longer needed. --- libmatemixer/matemixer-stream-switch.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'libmatemixer/matemixer-stream-switch.c') diff --git a/libmatemixer/matemixer-stream-switch.c b/libmatemixer/matemixer-stream-switch.c index 814918d..cfb74c8 100644 --- a/libmatemixer/matemixer-stream-switch.c +++ b/libmatemixer/matemixer-stream-switch.c @@ -55,6 +55,8 @@ static void mate_mixer_stream_switch_set_property (GObject *o const GValue *value, GParamSpec *pspec); +static void mate_mixer_stream_switch_dispose (GObject *object); + G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (MateMixerStreamSwitch, mate_mixer_stream_switch, MATE_MIXER_TYPE_SWITCH) static void @@ -63,6 +65,7 @@ mate_mixer_stream_switch_class_init (MateMixerStreamSwitchClass *klass) GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); + object_class->dispose = mate_mixer_stream_switch_dispose; object_class->get_property = mate_mixer_stream_switch_get_property; object_class->set_property = mate_mixer_stream_switch_set_property; @@ -161,6 +164,20 @@ mate_mixer_stream_switch_init (MateMixerStreamSwitch *swtch) swtch->priv = mate_mixer_stream_switch_get_instance_private (swtch); } +static void +mate_mixer_stream_switch_dispose (GObject *object) +{ + MateMixerStreamSwitch *swtch; + + swtch = MATE_MIXER_STREAM_SWITCH (object); + + if (swtch->priv->stream != NULL) + g_object_remove_weak_pointer(G_OBJECT (swtch->priv->stream), + (gpointer *) &swtch->priv->stream); + + G_OBJECT_CLASS (mate_mixer_stream_switch_parent_class)->dispose (object); +} + /** * mate_mixer_stream_switch_get_flags: * @swtch: a #MateMixerStreamSwitch -- cgit v1.2.1