[maemo-commits] [maemo-commits] r18333 - in projects/haf/branches/glib/glib-2-20/debian: . patches

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue May 12 15:02:45 EEST 2009
Author: csaavedra
Date: 2009-05-12 15:02:12 +0300 (Tue, 12 May 2009)
New Revision: 18333

Added:
   projects/haf/branches/glib/glib-2-20/debian/patches/70_use-monotonic-clock-for-timeouts.patch
Modified:
   projects/haf/branches/glib/glib-2-20/debian/changelog
   projects/haf/branches/glib/glib-2-20/debian/patches/series
Log:
* 70_use-monotonic-clock-for-timeouts.patch: new patch.
  Fixes: NB#115307 (Glib should use monotonic clock for timeouts)



Modified: projects/haf/branches/glib/glib-2-20/debian/changelog
===================================================================
--- projects/haf/branches/glib/glib-2-20/debian/changelog	2009-05-12 11:59:47 UTC (rev 18332)
+++ projects/haf/branches/glib/glib-2-20/debian/changelog	2009-05-12 12:02:12 UTC (rev 18333)
@@ -9,8 +9,10 @@
   * Drop patches applied upstream:
     + 20-gunixmount.patch, dropped.
     + 55-gsignal.patch, dropped.
+  * 70_use-monotonic-clock-for-timeouts.patch: new patch.
+    Fixes: NB#115307 (Glib should use monotonic clock for timeouts)
 
- -- Claudio Saavedra <csaavedra at igalia.com>  Thu, 07 May 2009 14:03:16 +0300
+ -- Claudio Saavedra <csaavedra at igalia.com>  Tue, 12 May 2009 14:51:17 +0300
 
 glib2.0 (2.20.1-1) unstable; urgency=low
 

Added: projects/haf/branches/glib/glib-2-20/debian/patches/70_use-monotonic-clock-for-timeouts.patch
===================================================================
--- projects/haf/branches/glib/glib-2-20/debian/patches/70_use-monotonic-clock-for-timeouts.patch	2009-05-12 11:59:47 UTC (rev 18332)
+++ projects/haf/branches/glib/glib-2-20/debian/patches/70_use-monotonic-clock-for-timeouts.patch	2009-05-12 12:02:12 UTC (rev 18333)
@@ -0,0 +1,169 @@
+diff --git a/configure.in b/configure.in
+index 32d6561..21d617b 100644
+--- a/configure.in
++++ b/configure.in
+@@ -2345,6 +2345,7 @@ AC_CHECK_FUNCS(clock_gettime, [], [
+     AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
+     G_THREAD_LIBS="$G_THREAD_LIBS -lrt"
+     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS_FOR_GTHREAD -lrt"
++    G_LIBS_EXTRA="$G_LIBS_EXTRA -lrt"
+   ])
+ ])
+ 
+@@ -2611,13 +2612,13 @@ dnl **********************
+ 
+ case $host in
+   *-*-cygwin*)
+-	G_LIBS_EXTRA="-luser32 -lkernel32"
++	G_LIBS_EXTRA="$G_LIBS_EXTRA -luser32 -lkernel32"
+     ;;
+   *-*-mingw*)
+-	G_LIBS_EXTRA="-lws2_32 -lole32"
++	G_LIBS_EXTRA="$G_LIBS_EXTRA -lws2_32 -lole32"
+     ;;
+   *)
+-	G_LIBS_EXTRA=""
++	G_LIBS_EXTRA="$G_LIBS_EXTRA"
+     ;;
+ esac
+ AC_SUBST(G_LIBS_EXTRA)
+diff --git a/glib/gmain.c b/glib/gmain.c
+index 17866c7..a0d3a77 100644
+--- a/glib/gmain.c
++++ b/glib/gmain.c
+@@ -77,6 +77,10 @@
+ 
+ #include "galias.h"
+ 
++#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_MONOTONIC_CLOCK)
++#define USE_CLOCK_GETTIME 1
++#endif
++
+ /* Types */
+ 
+ typedef struct _GTimeoutSource GTimeoutSource;
+@@ -158,6 +162,7 @@ struct _GMainContext
+   GPollFunc poll_func;
+ 
+   GTimeVal current_time;
++  GTimeVal current_time_monotonic;
+   gboolean time_is_current;
+ };
+ 
+@@ -229,6 +234,9 @@ struct _GPollRec
+ 
+ /* Forward declarations */
+ 
++static void g_get_current_time_monotonic        (GTimeVal     *result);
++static void g_source_get_current_time_monotonic (GSource      *source,
++						 GTimeVal     *timeval);
+ static void g_source_unref_internal             (GSource      *source,
+ 						 GMainContext *context,
+ 						 gboolean      have_lock);
+@@ -1477,6 +1485,20 @@ g_get_current_time (GTimeVal *result)
+ }
+ 
+ static void
++g_get_current_time_monotonic (GTimeVal *result)
++{
++#ifdef USE_CLOCK_GETTIME
++  struct timespec r;
++
++  clock_gettime (CLOCK_MONOTONIC, &r);
++  result->tv_sec = r.tv_sec;
++  result->tv_usec = r.tv_nsec / 1000;
++#else
++  g_get_current_time (result);
++#endif
++}
++
++static void
+ g_main_dispatch_free (gpointer dispatch)
+ {
+   g_slice_free (GMainDispatch, dispatch);
+@@ -2968,6 +2990,7 @@ g_source_get_current_time (GSource  *source,
+   if (!context->time_is_current)
+     {
+       g_get_current_time (&context->current_time);
++      g_get_current_time_monotonic (&context->current_time_monotonic);
+       context->time_is_current = TRUE;
+     }
+   
+@@ -2976,6 +2999,30 @@ g_source_get_current_time (GSource  *source,
+   UNLOCK_CONTEXT (context);
+ }
+ 
++static void
++g_source_get_current_time_monotonic (GSource  *source,
++				     GTimeVal *timeval)
++{
++  GMainContext *context;
++
++  g_return_if_fail (source->context != NULL);
++
++  context = source->context;
++
++  LOCK_CONTEXT (context);
++
++  if (!context->time_is_current)
++    {
++      g_get_current_time (&context->current_time);
++      g_get_current_time_monotonic (&context->current_time_monotonic);
++      context->time_is_current = TRUE;
++    }
++
++  *timeval = context->current_time_monotonic;
++
++  UNLOCK_CONTEXT (context);
++}
++
+ /**
+  * g_main_context_set_poll_func:
+  * @context: a #GMainContext
+@@ -3180,7 +3227,7 @@ g_timeout_prepare (GSource *source,
+   
+   GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+ 
+-  g_source_get_current_time (source, &current_time);
++  g_source_get_current_time_monotonic (source, &current_time);
+ 
+   sec = timeout_source->expiration.tv_sec - current_time.tv_sec;
+   msec = (timeout_source->expiration.tv_usec - current_time.tv_usec) / 1000;
+@@ -3229,8 +3276,8 @@ g_timeout_check (GSource *source)
+   GTimeVal current_time;
+   GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+ 
+-  g_source_get_current_time (source, &current_time);
+-  
++  g_source_get_current_time_monotonic (source, &current_time);
++
+   return ((timeout_source->expiration.tv_sec < current_time.tv_sec) ||
+ 	  ((timeout_source->expiration.tv_sec == current_time.tv_sec) &&
+ 	   (timeout_source->expiration.tv_usec <= current_time.tv_usec)));
+@@ -3254,7 +3301,7 @@ g_timeout_dispatch (GSource     *source,
+     {
+       GTimeVal current_time;
+ 
+-      g_source_get_current_time (source, &current_time);
++      g_source_get_current_time_monotonic (source, &current_time);
+       g_timeout_set_expiration (timeout_source, &current_time);
+ 
+       return TRUE;
+@@ -3284,7 +3331,7 @@ g_timeout_source_new (guint interval)
+ 
+   timeout_source->interval = interval;
+ 
+-  g_get_current_time (&current_time);
++  g_get_current_time_monotonic (&current_time);
+   g_timeout_set_expiration (timeout_source, &current_time);
+   
+   return source;
+@@ -3317,7 +3364,7 @@ g_timeout_source_new_seconds (guint interval)
+   timeout_source->interval = 1000*interval;
+   timeout_source->granularity = 1000;
+ 
+-  g_get_current_time (&current_time);
++  g_get_current_time_monotonic (&current_time);
+   g_timeout_set_expiration (timeout_source, &current_time);
+ 
+   return source;


Property changes on: projects/haf/branches/glib/glib-2-20/debian/patches/70_use-monotonic-clock-for-timeouts.patch
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: projects/haf/branches/glib/glib-2-20/debian/patches/series
===================================================================
--- projects/haf/branches/glib/glib-2-20/debian/patches/series	2009-05-12 11:59:47 UTC (rev 18332)
+++ projects/haf/branches/glib/glib-2-20/debian/patches/series	2009-05-12 12:02:12 UTC (rev 18333)
@@ -5,3 +5,4 @@
 40-gscanner.patch
 45-gunicode.patch
 50-gthread.patch
+70_use-monotonic-clock-for-timeouts.patch


More information about the maemo-commits mailing list