void
bus_expire_timeout_set_interval (DBusTimeout   *timeout,
                                 int            next_interval)
{
  if (next_interval >= 0)
    {
      _dbus_timeout_set_interval (timeout,
                                  next_interval);
      _dbus_timeout_set_enabled (timeout, TRUE);

      _dbus_verbose ("Enabled an expire timeout with interval %d\n",
                     next_interval);
    }
  else if (dbus_timeout_get_enabled (timeout))
    {
      _dbus_timeout_set_enabled (timeout, FALSE);

      _dbus_verbose ("Disabled an expire timeout\n");
    }
  else
    _dbus_verbose ("No need to disable this expire timeout\n");
}
BusExpireList*
bus_expire_list_new (DBusLoop      *loop,
                     int            expire_after,
                     BusExpireFunc  expire_func,
                     void          *data)
{
  BusExpireList *list;

  list = dbus_new0 (BusExpireList, 1);
  if (list == NULL)
    return NULL;

  list->expire_func = expire_func;
  list->data = data;
  list->loop = loop;
  list->expire_after = expire_after;

  list->timeout = _dbus_timeout_new (100, /* irrelevant */
                                     expire_timeout_handler,
                                     list, NULL);
  if (list->timeout == NULL)
    goto failed;

  _dbus_timeout_set_enabled (list->timeout, FALSE);

  if (!_dbus_loop_add_timeout (list->loop,
                               list->timeout,
                               call_timeout_callback, NULL, NULL))
    goto failed;

  return list;

 failed:
  if (list->timeout)
    _dbus_timeout_unref (list->timeout);

  dbus_free (list);

  return NULL;
}