diff options
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | bus/connection.c | 12 | ||||
| -rw-r--r-- | bus/expirelist.c | 1 | ||||
| -rw-r--r-- | bus/expirelist.h | 1 | ||||
| -rw-r--r-- | doc/TODO | 10 | 
5 files changed, 19 insertions, 13 deletions
@@ -1,5 +1,13 @@  2004-05-20  Kristian Høgsberg  <krh@redhat.com> +	* doc/TODO: Remove resolved items. + +	* bus/expirelist.h (struct BusExpireList): remove unused n_items +	field. +	 +	* bus/connection.c (bus_connections_expect_reply): Enforce the +	per-connection limit on pending replies. +	  	Patch from Jon Trowbridge <trow@ximian.com>:   	* bus/main.c (setup_reload_pipe): Added.  Creates a pipe and sets diff --git a/bus/connection.c b/bus/connection.c index 557401fd..6b4fbe73 100644 --- a/bus/connection.c +++ b/bus/connection.c @@ -517,7 +517,6 @@ bus_connections_unref (BusConnections *connections)        _dbus_assert (connections->n_completed == 0); -      _dbus_assert (connections->pending_replies->n_items == 0);        bus_expire_list_free (connections->pending_replies);        _dbus_loop_remove_timeout (bus_context_get_loop (connections->context), @@ -1544,6 +1543,7 @@ bus_connections_expect_reply (BusConnections  *connections,    dbus_uint32_t reply_serial;    DBusList *link;    CancelPendingReplyData *cprd; +  int count;    _dbus_assert (will_get_reply != NULL);    _dbus_assert (will_send_reply != NULL); @@ -1555,6 +1555,7 @@ bus_connections_expect_reply (BusConnections  *connections,    reply_serial = dbus_message_get_serial (reply_to_this);    link = _dbus_list_get_first_link (&connections->pending_replies->items); +  count = 0;    while (link != NULL)      {        pending = link->data; @@ -1570,8 +1571,17 @@ bus_connections_expect_reply (BusConnections  *connections,        link = _dbus_list_get_next_link (&connections->pending_replies->items,                                         link); +      ++count;      } +  if (count >= +      bus_context_get_max_replies_per_connection (connections->context)) +    { +      dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED, +		      "The maximum number of pending replies per connection has been reached"); +      return FALSE; +    } +    pending = dbus_new0 (BusPendingReply, 1);    if (pending == NULL)      { diff --git a/bus/expirelist.c b/bus/expirelist.c index ea2760ab..f1485dc1 100644 --- a/bus/expirelist.c +++ b/bus/expirelist.c @@ -81,7 +81,6 @@ bus_expire_list_new (DBusLoop      *loop,  void  bus_expire_list_free (BusExpireList *list)  { -  _dbus_assert (list->n_items == 0);    _dbus_assert (list->items == NULL);    _dbus_loop_remove_timeout (list->loop, list->timeout, diff --git a/bus/expirelist.h b/bus/expirelist.h index c91964eb..9baa36da 100644 --- a/bus/expirelist.h +++ b/bus/expirelist.h @@ -38,7 +38,6 @@ typedef dbus_bool_t (* BusExpireFunc) (BusExpireList *list,  struct BusExpireList  {    DBusList      *items; /**< List of BusExpireItem */ -  int            n_items;    DBusTimeout   *timeout;    DBusLoop      *loop;    BusExpireFunc  expire_func; @@ -80,10 +80,6 @@   - re_align_field_recurse() in dbus-message.c is broken because it      crashes on some types of header field values. security problem. - - the system daemon has to be able to reload changes to the  -   security policy without restarting, because apps won't  -   be coded to handle it restarting -   - modify the wire protocol to keep the args signature separate      from the args themselves. Make the name of TYPE_CUSTOM part      of the type signature, rather than part of the value. @@ -107,8 +103,6 @@     yourself; is it an error, or allowed? If allowed,      we need to have a test for it in the test suite. - - the max_replies_per_connection resource limit isn't implemented -   - array lengths should probably be returned as size_t rather than int     (though they are kind of a pita to pass in as size_t with the       varargs, so maybe not - what does glib do with g_object_get()?) @@ -118,10 +112,6 @@   - recursive dispatch, see dbus_connection_dispatch() - - Better error checking for bogus configuration files. Currently if a  -   configuration file tries to include itself the bus crashes on start. We  -   should probably have a check against this. -   - Perhaps the auth protocol should be able to negotiate a protocol      version to the least-common-denominator between client and server?     Though in practice ever using this feature would be pretty tough,   | 
