[gtk+] GtkTimeline: protect the timeline from unref



commit e2750a4f5e7b893a0a93265c93b26513f185535f
Author: Ryan Lortie <desrt desrt ca>
Date:   Wed Jan 25 11:30:11 2012 -0500

    GtkTimeline: protect the timeline from unref
    
    The timeline frame function emits several signals, assuming that the
    timeline will exist after these signals return.  This assumption can be
    invalid if signal handlers unref the timeline.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=668675

 gtk/gtktimeline.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtktimeline.c b/gtk/gtktimeline.c
index db9b0be..5744e4b 100644
--- a/gtk/gtktimeline.c
+++ b/gtk/gtktimeline.c
@@ -311,6 +311,9 @@ gtk_timeline_run_frame (GtkTimeline *timeline)
   gdouble delta_progress, progress;
   guint elapsed_time;
 
+  /* the user may unref us during the signals, so save ourselves */
+  g_object_ref (timeline);
+
   priv = timeline->priv;
 
   elapsed_time = (guint) (g_timer_elapsed (priv->timer, NULL) * 1000);
@@ -355,10 +358,13 @@ gtk_timeline_run_frame (GtkTimeline *timeline)
             }
           g_timer_stop (priv->timer);
           g_signal_emit (timeline, signals [FINISHED], 0);
+          g_object_unref (timeline);
           return FALSE;
         }
     }
 
+  g_object_unref (timeline);
+
   return TRUE;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]