From a37b99f0720c3c5e095ab49c3f7d5bc04f97c57c Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Wed, 11 Feb 2009 17:19:25 +0000 Subject: [PATCH] Wed Jan 28 12:20:34 CST 2009 Mikhail Zabaluev * Added deferrable timer support to the GSource integration. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11857 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/sofia-sip/.update | 2 +- .../libsofia-sip-ua-glib/su-glib/su_source.c | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index 3492a19f01..7bff30d821 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Wed Feb 11 11:18:53 CST 2009 +Wed Feb 11 11:19:18 CST 2009 diff --git a/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c b/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c index f9467e49f3..795da9f314 100644 --- a/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c +++ b/libs/sofia-sip/libsofia-sip-ua-glib/su-glib/su_source.c @@ -377,6 +377,7 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout) { SuSource *ss = (SuSource *)gs; su_port_t *self = ss->ss_port; + su_duration_t tout = SU_WAIT_FOREVER; enter; @@ -388,21 +389,22 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout) if (self->sup_base->sup_timers) { su_time_t now; GTimeVal gtimeval; - su_duration_t tout; g_source_get_current_time(gs, >imeval); now.tv_sec = gtimeval.tv_sec + 2208988800UL; now.tv_usec = gtimeval.tv_usec; tout = su_timer_next_expires(&self->sup_base->sup_timers, now); - - *return_tout = (tout < 0 || tout > (su_duration_t)G_MAXINT)? - -1 : (gint)tout; - - return (tout == 0); + } + if (self->sup_base->sup_deferrable) { + if (tout > self->sup_base->sup_max_defer) + tout = self->sup_base->sup_max_defer; } - return FALSE; + *return_tout = (tout >= 0 && tout <= (su_duration_t)G_MAXINT)? + (gint)tout : -1; + + return (tout == 0); } static @@ -440,11 +442,10 @@ gboolean su_source_dispatch(GSource *gs, if (self->sup_base->sup_head) su_base_port_getmsgs(self); - if (self->sup_base->sup_timers) { + if (self->sup_base->sup_timers || self->sup_base->sup_deferrable) { su_time_t now; GTimeVal gtimeval; su_duration_t tout; - int timers = 0; tout = SU_DURATION_MAX; @@ -453,7 +454,8 @@ gboolean su_source_dispatch(GSource *gs, now.tv_sec = gtimeval.tv_sec + 2208988800UL; now.tv_usec = gtimeval.tv_usec; - timers = su_timer_expire(&self->sup_base->sup_timers, &tout, now); + su_timer_expire(&self->sup_base->sup_timers, &tout, now); + su_timer_expire(&self->sup_base->sup_deferrable, &tout, now); } #if SU_HAVE_POLL