]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Wed Jan 28 12:31:06 CST 2009 Mikhail Zabaluev <mikhail.zabaluev@nokia.com>
authorMichael Jerris <mike@jerris.com>
Wed, 11 Feb 2009 17:20:26 +0000 (17:20 +0000)
committerMichael Jerris <mike@jerris.com>
Wed, 11 Feb 2009 17:20:26 +0000 (17:20 +0000)
  * su-glib/su_source.c: improved the deferrable timeout calculation

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11860 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c

index 646ae530a53b5744b9054852d629b36b8e54c3e1..788f375fd2b56dcb26866fff48bc66fb80a8513e 100644 (file)
@@ -386,7 +386,7 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout)
     return TRUE;
   }
 
-  if (self->sup_base->sup_timers) {
+  if (self->sup_base->sup_timers || self->sup_base->sup_deferrable) {
     su_time_t now;
     GTimeVal  gtimeval;
 
@@ -395,10 +395,18 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout)
     now.tv_usec = gtimeval.tv_usec;
 
     tout = su_timer_next_expires(&self->sup_base->sup_timers, now);
-  }
-  if (self->sup_base->sup_deferrable) {
-    if (tout > self->sup_base->sup_max_defer)
-      tout = self->sup_base->sup_max_defer;
+
+    if (self->sup_base->sup_deferrable) {
+      su_duration_t tout_defer;
+
+      tout_defer = su_timer_next_expires(&self->sup_base->sup_deferrable, now);
+
+      if (tout_defer < self->sup_base->sup_max_defer)
+        tout_defer = self->sup_base->sup_max_defer;
+
+      if (tout > tout_defer)
+        tout = tout_defer;
+    }
   }
 
   *return_tout = (tout >= 0 && tout <= (su_duration_t)G_MAXINT)?