From: jait Date: Wed, 16 Sep 2009 15:23:34 +0000 (+0000) Subject: fix a potential crash while changing algorithm X-Git-Tag: fremantle/0.1.2~11 X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;ds=sidebyside;h=9a29e3751875b4bbc7bf7ad1f6d0ac42b477c99f;p=tunertool fix a potential crash while changing algorithm git-svn-id: file:///svnroot/tunertool/trunk@29 4bb5ff34-d565-4b58-9699-12000fa1827a --- diff --git a/src/gstpitch.c b/src/gstpitch.c index 7a2acc4..395cacd 100644 --- a/src/gstpitch.c +++ b/src/gstpitch.c @@ -169,9 +169,10 @@ gst_pitch_class_init (GstPitchClass * klass) } static void -gst_pitch_setup_algorithm (GstPitch * filter) +gst_pitch_setup_algorithm (GstPitch * filter, GstPitchAlgorithm algorithm) { - if (filter->algorithm == GST_PITCH_ALGORITHM_HPS) { + g_mutex_lock (filter->mutex); + if (algorithm == GST_PITCH_ALGORITHM_HPS) { if (NULL == filter->module) filter->module = (gint *) g_malloc (RATE * sizeof (gint)); } @@ -181,6 +182,8 @@ gst_pitch_setup_algorithm (GstPitch * filter) filter->module = NULL; } + filter->algorithm = algorithm; + g_mutex_unlock (filter->mutex); } static void @@ -191,8 +194,9 @@ gst_pitch_init (GstPitch * filter, GstPitchClass * klass) filter->minfreq = 30; filter->maxfreq = 1500; filter->message = TRUE; - filter->algorithm = DEFAULT_PROP_ALGORITHM; - gst_pitch_setup_algorithm (filter); + filter->mutex = g_mutex_new (); + + gst_pitch_setup_algorithm (filter, DEFAULT_PROP_ALGORITHM); } static void @@ -211,6 +215,8 @@ gst_pitch_dispose (GObject * object) if (filter->module) g_free (filter->module); + g_mutex_free (filter->mutex); + kiss_fft_cleanup (); G_OBJECT_CLASS (parent_class)->dispose (object); @@ -233,8 +239,7 @@ gst_pitch_set_property (GObject * object, guint prop_id, filter->maxfreq = g_value_get_int (value); break; case PROP_ALGORITHM: - filter->algorithm = g_value_get_enum (value); - gst_pitch_setup_algorithm (filter); + gst_pitch_setup_algorithm (filter, g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -308,6 +313,7 @@ gst_pitch_message_new (GstPitch * filter) filter->maxfreq); /*GST_DEBUG_OBJECT (filter, "min_i = %d, max_i = %d", min_i, max_i); */ + g_mutex_lock (filter->mutex); switch (filter->algorithm) { case GST_PITCH_ALGORITHM_FFT: @@ -380,6 +386,7 @@ gst_pitch_message_new (GstPitch * filter) default: break; } + g_mutex_unlock (filter->mutex); /* g_debug("freq %d[%d]\n", frequency, frequency_module); diff --git a/src/gstpitch.h b/src/gstpitch.h index d4a2e8a..043a6d4 100644 --- a/src/gstpitch.h +++ b/src/gstpitch.h @@ -71,7 +71,8 @@ struct _GstPitch kiss_fft_cpx *signal; kiss_fft_cpx *spectrum; - gint * module; + gint *module; + GMutex *mutex; }; struct _GstPitchClass @@ -79,7 +80,7 @@ struct _GstPitchClass GstBaseTransformClass parent_class; }; -GType gst_pithc_get_type (void); +GType gst_pitch_get_type (void); G_END_DECLS #endif /* __GST_PITCH_H__ */