提交 a37b99f0 authored 作者: Michael Jerris's avatar Michael Jerris

Wed Jan 28 12:20:34 CST 2009 Mikhail Zabaluev <mikhail.zabaluev@nokia.com>

  * Added deferrable timer support to the GSource integration.
  


git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11857 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 48c52ad5
Wed Feb 11 11:18:53 CST 2009 Wed Feb 11 11:19:18 CST 2009
...@@ -377,6 +377,7 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout) ...@@ -377,6 +377,7 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout)
{ {
SuSource *ss = (SuSource *)gs; SuSource *ss = (SuSource *)gs;
su_port_t *self = ss->ss_port; su_port_t *self = ss->ss_port;
su_duration_t tout = SU_WAIT_FOREVER;
enter; enter;
...@@ -388,21 +389,22 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout) ...@@ -388,21 +389,22 @@ gboolean su_source_prepare(GSource *gs, gint *return_tout)
if (self->sup_base->sup_timers) { if (self->sup_base->sup_timers) {
su_time_t now; su_time_t now;
GTimeVal gtimeval; GTimeVal gtimeval;
su_duration_t tout;
g_source_get_current_time(gs, &gtimeval); g_source_get_current_time(gs, &gtimeval);
now.tv_sec = gtimeval.tv_sec + 2208988800UL; now.tv_sec = gtimeval.tv_sec + 2208988800UL;
now.tv_usec = gtimeval.tv_usec; now.tv_usec = gtimeval.tv_usec;
tout = su_timer_next_expires(&self->sup_base->sup_timers, now); 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_tout = (tout >= 0 && tout <= (su_duration_t)G_MAXINT)?
(gint)tout : -1;
return FALSE; return (tout == 0);
} }
static static
...@@ -440,11 +442,10 @@ gboolean su_source_dispatch(GSource *gs, ...@@ -440,11 +442,10 @@ gboolean su_source_dispatch(GSource *gs,
if (self->sup_base->sup_head) if (self->sup_base->sup_head)
su_base_port_getmsgs(self); 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; su_time_t now;
GTimeVal gtimeval; GTimeVal gtimeval;
su_duration_t tout; su_duration_t tout;
int timers = 0;
tout = SU_DURATION_MAX; tout = SU_DURATION_MAX;
...@@ -453,7 +454,8 @@ gboolean su_source_dispatch(GSource *gs, ...@@ -453,7 +454,8 @@ gboolean su_source_dispatch(GSource *gs,
now.tv_sec = gtimeval.tv_sec + 2208988800UL; now.tv_sec = gtimeval.tv_sec + 2208988800UL;
now.tv_usec = gtimeval.tv_usec; 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 #if SU_HAVE_POLL
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论