mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-09 04:58:02 +02:00
fix expiration of pending replies
* bus/expirelist.c (do_expiration_with_current_time): calculate correct min wait time and next interval (bus_expire_list_add, bus_expire_list_add_link): if the timeout is disabled when we add an item to the expire list, enable the timeout (do_expiration_with_current_time): only set timeout if there are items to expire
This commit is contained in:
parent
960fef844b
commit
7c4b345802
2 changed files with 37 additions and 16 deletions
12
ChangeLog
12
ChangeLog
|
|
@ -1,3 +1,15 @@
|
|||
2008-04-03 John (J5) Palmieri <johnp@redhat.com>
|
||||
|
||||
Patch from Kimmo Hämäläinen <kimmo.hamalainen at nokia.com>
|
||||
|
||||
* bus/expirelist.c
|
||||
(do_expiration_with_current_time): calculate correct min wait time
|
||||
and next interval
|
||||
(bus_expire_list_add, bus_expire_list_add_link): if the timeout is
|
||||
disabled when we add an item to the expire list, enable the timeout
|
||||
(do_expiration_with_current_time): only set timeout if there are
|
||||
items to expire
|
||||
|
||||
2008-04-01 Timo Hoenig <thoenig@suse.de>
|
||||
|
||||
Patch from Frederic Crozat <fcrozat@mandriva.com>
|
||||
|
|
|
|||
|
|
@ -138,9 +138,11 @@ do_expiration_with_current_time (BusExpireList *list,
|
|||
long tv_usec)
|
||||
{
|
||||
DBusList *link;
|
||||
int next_interval;
|
||||
int next_interval, min_wait_time, items_to_expire;
|
||||
|
||||
next_interval = -1;
|
||||
min_wait_time = 3600 * 1000; /* this is reset anyway if used */
|
||||
items_to_expire = 0;
|
||||
|
||||
link = _dbus_list_get_first_link (&list->items);
|
||||
while (link != NULL)
|
||||
|
|
@ -173,17 +175,20 @@ do_expiration_with_current_time (BusExpireList *list,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* We can end the loop, since the connections are in oldest-first order */
|
||||
next_interval = ((double)list->expire_after) - elapsed;
|
||||
_dbus_verbose ("Item %p expires in %d milliseconds\n",
|
||||
item, next_interval);
|
||||
double to_wait;
|
||||
|
||||
break;
|
||||
items_to_expire = 1;
|
||||
to_wait = (double) list->expire_after - elapsed;
|
||||
if (min_wait_time > to_wait)
|
||||
min_wait_time = to_wait;
|
||||
}
|
||||
|
||||
link = next;
|
||||
}
|
||||
|
||||
if (next_interval < 0 && items_to_expire)
|
||||
next_interval = min_wait_time;
|
||||
|
||||
return next_interval;
|
||||
}
|
||||
|
||||
|
|
@ -223,16 +228,14 @@ void
|
|||
bus_expire_list_remove_link (BusExpireList *list,
|
||||
DBusList *link)
|
||||
{
|
||||
_dbus_list_remove_link (&list->items,
|
||||
link);
|
||||
_dbus_list_remove_link (&list->items, link);
|
||||
}
|
||||
|
||||
dbus_bool_t
|
||||
bus_expire_list_remove (BusExpireList *list,
|
||||
BusExpireItem *item)
|
||||
{
|
||||
return _dbus_list_remove (&list->items,
|
||||
item);
|
||||
return _dbus_list_remove (&list->items, item);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -246,8 +249,13 @@ dbus_bool_t
|
|||
bus_expire_list_add (BusExpireList *list,
|
||||
BusExpireItem *item)
|
||||
{
|
||||
return _dbus_list_prepend (&list->items,
|
||||
item);
|
||||
dbus_bool_t ret;
|
||||
|
||||
ret = _dbus_list_prepend (&list->items, item);
|
||||
if (ret && !dbus_timeout_get_enabled (list->timeout))
|
||||
bus_expire_timeout_set_interval (list->timeout, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -256,8 +264,10 @@ bus_expire_list_add_link (BusExpireList *list,
|
|||
{
|
||||
_dbus_assert (link->data != NULL);
|
||||
|
||||
_dbus_list_prepend_link (&list->items,
|
||||
link);
|
||||
_dbus_list_prepend_link (&list->items, link);
|
||||
|
||||
if (!dbus_timeout_get_enabled (list->timeout))
|
||||
bus_expire_timeout_set_interval (list->timeout, 0);
|
||||
}
|
||||
|
||||
DBusList*
|
||||
|
|
@ -270,8 +280,7 @@ DBusList*
|
|||
bus_expire_list_get_next_link (BusExpireList *list,
|
||||
DBusList *link)
|
||||
{
|
||||
return _dbus_list_get_next_link (&list->items,
|
||||
link);
|
||||
return _dbus_list_get_next_link (&list->items, link);
|
||||
}
|
||||
|
||||
dbus_bool_t
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue