| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-dataslot.c (_dbus_data_slot_allocator_unref)
	(_dbus_data_slot_allocator_alloc): rework these to keep a
	reference count on each slot and automatically manage a global
	slot ID variable passed in by address
	* bus/bus.c: convert to new dataslot API
	* dbus/dbus-bus.c: convert to new dataslot API
	* dbus/dbus-connection.c: convert to new dataslot API
	* dbus/dbus-server.c: convert to new dataslot API
	* glib/dbus-gmain.c: ditto
	* bus/test.c: ditto
	* bus/connection.c: ditto
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-marshal.c (_dbus_marshal_validate_arg): fix to avoid
	calling _dbus_marshal_validate_arg() for every byte in a byte
	array, etc.
	* dbus/dbus-message-handler.c: use atomic reference counting to
	reduce number of locks slightly; the global lock in here sucks
	* dbus/dbus-connection.c
	(_dbus_connection_update_dispatch_status_and_unlock): variant of
	update_dispatch_status that can be called with lock held; then use
	in a couple places to reduce locking/unlocking
	(dbus_connection_send): hold the lock over the whole function
	instead of acquiring it twice.
	* dbus/dbus-timeout.c (_dbus_timeout_new): handle OOM
	* bus/connection.c (bus_connections_setup_connection): fix access
	to already-freed memory.
	* dbus/dbus-connection.c: keep a little cache of linked list
	nodes, to avoid using the global linked list alloc lock in the
	normal send-message case. Instead we just use the connection lock
	that we already have to take.
	* dbus/dbus-list.c (_dbus_list_find_last): new function
	* dbus/dbus-sysdeps.c (_dbus_atomic_inc, _dbus_atomic_dec):
	change to use a struct for the atomic type; fix docs,
	they return value before increment, not after increment.
	* dbus/dbus-string.c (_dbus_string_append_4_aligned)
	(_dbus_string_append_8_aligned): new functions to try to
	microoptimize this operation.
	(reallocate_for_length): break this out of set_length(), to
	improve profile info, and also so we can consider inlining the
	set_length() part.
	* dbus/dbus-message.c (dbus_message_new_empty_header): init data
	strings with some preallocation, cuts down on our calls to realloc
	a fair bit. Though if we can get the "move entire string to empty
	string" optimization below to kick in here, it would be better.
	* dbus/dbus-string.c (_dbus_string_move): just call
	_dbus_string_move_len
	(_dbus_string_move_len): add a special case for moving
	an entire string into an empty string; we can just
	swap the string data instead of doing any reallocs.
	(_dbus_string_init_preallocated): new function
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Write a "test-profile" that does echo client-server with threads;
	profile reveals lock contention, memcpy/realloc of buffers, and
	UTF-8 validation as hot spots. 20% of lock contention eliminated
	with dbus_atomic_inc/dec implementation on x86.  Much remaining
	contention is global mempool locks for GList and DBusList.
	* dbus/dbus-sysdeps.c (_dbus_atomic_inc, _dbus_atomic_dec): add
	x86 implementation
	* dbus/dbus-connection.c (struct DBusConnection): use
	dbus_atomic_t for the reference count
	* dbus/dbus-message.c (struct DBusMessage): declare
	dbus_atomic_t values as volatile
	* configure.in: code to detect ability to use atomic integer
	operations in assembly, from GLib patch
	* dbus/dbus-internals.c (_dbus_verbose_real): call getpid every
	time, tired of it being wrong in threads and forked processes
	* glib/test-profile.c: a little program to bounce messages back
	and forth between threads and eat CPU
	* dbus/dbus-connection.c: add debug spew macros for debugging
	thread locks; include config.h at top; fix deadlock in
	dbus_connection_flush()
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Unbreak my code...
	* dbus/dbus-transport.c (_dbus_transport_get_dispatch_status):
	report correct status if we finish processing authentication
	inside this function.
	* bus/activation.c (try_send_activation_failure): use
	bus_transaction_send_error_reply
	* bus/connection.c (bus_connection_get_groups): return an error
	explaining the problem
	* bus/bus.c (bus_context_check_security_policy): implement
	restriction here that inactive connections can only send the
	hello message. Also, allow bus driver to send anything to
	any recipient.
	* bus/connection.c (bus_connection_complete): create the
	BusClientPolicy here instead of on-demand.
	(bus_connection_get_policy): don't return an error
	* dbus/dbus-message.c (dbus_message_new_error_reply): allow NULL
	sender field in message being replied to
	* bus/bus.c (bus_context_check_security_policy): fix silly typo
	causing it to return FALSE always
	* bus/policy.c (bus_client_policy_check_can_send): fix bug where
	we checked sender rather than destination
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
test suite is slightly hosed at the moment, will fix soon
	* bus/connection.c (bus_connections_expire_incomplete): fix to
	properly disable the timeout when required
	(bus_connection_set_name): check whether we can remove incomplete
	connections timeout after we complete each connection.
	* dbus/dbus-mainloop.c (check_timeout): fix this up a bit,
	probably still broken.
	* bus/services.c (bus_registry_acquire_service): implement max
	number of services owned, and honor allow/deny rules on which
	services a connection can own.
	* bus/connection.c (bus_connection_get_policy): report errors here
	* bus/activation.c: implement limit on number of pending
	activations
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/dispatch.c: somehow missed some name_is
	* dbus/dbus-timeout.c (_dbus_timeout_set_enabled)
	(_dbus_timeout_set_interval): new
	* bus/connection.c (bus_connections_setup_connection): record time
	when each connection is first set up, and expire them after the
	auth timeout passes.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* configure.in: add --enable-checks
	* dbus/dbus-message.c (dbus_message_new): reverse name/service arguments
	* dbus/dbus-connection.c (dbus_connection_preallocate_send): fix
	to use thread locks.
	(_dbus_connection_handler_destroyed_locked): move some private
	functions into proper docs group
	* dbus/dbus-internals.h: add _dbus_return_if_fail,
	_dbus_return_val_if_fail
	Throughout: use dbus_return_if_fail
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/driver.c (bus_driver_handle_hello): check limits and
	return an error if they are exceeded.
	* bus/connection.c: maintain separate lists of active and inactive
	connections, and a count of each. Maintain count of completed
	connections per user. Implement code to check connection limits.
	* dbus/dbus-list.c (_dbus_list_unlink): export
	* bus/bus.c (bus_context_check_security_policy): enforce a maximum
	number of bytes in the message queue for a connection
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* glib/dbus-gmain.c: adapt to watch changes
	* bus/bus.c, bus/activation.c, etc.: adjust to watch changes
	* dbus/dbus-server.h: remove dbus_server_handle_watch
	* dbus/dbus-connection.h: remove dbus_connection_handle_watch
	* dbus/dbus-watch.c (dbus_watch_handle): change DBusWatch to work
	like DBusTimeout, so we don't need dbus_connection_handle_watch
	etc.
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
* doc/dbus-specification.sgml: make spec say serials are unsigned
	* dbus/dbus-message.h: change message serials to unsigned
	* dbus/dbus-connection.c: adapt to message serials being unsigned
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/bus.c: create and keep around a shared DBusUserDatabase
	object.
	* bus/connection.c (bus_connection_get_groups): don't cache
	groups for user in the connection object, since user database
	object now does that.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-mainloop.c: fix some reentrancy issues by refcounting
	callbacks
	* test/data/valid-config-files/debug-allow-all.conf.in: allow all
	users
	* dbus/dbus-transport.c (_dbus_transport_get_dispatch_status):
	fix to only recover unused bytes if we're already authenticated
	(_dbus_transport_get_is_authenticated): fix to still mark us
	authenticated if there are unused bytes.
	* bus/dispatch.c: implement security policy checking
	* bus/connection.c (bus_transaction_send_from_driver): new
	* bus/bus.c (bus_context_check_security_policy): new
	* bus/dispatch.c (send_service_nonexistent_error): delete this,
	now we just set the DBusError and it gets converted to an error
	reply.
	* bus/connection.c (allow_user_function): enable code using actual
	data from the config file
	* bus/policy.c (list_allows_user): handle wildcard rules for
	user/group connection perms
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/policy.h: change BusPolicy to be the thing from the config
	file, and rename old BusPolicy to BusClientPolicy
	* bus/bus.c, bus/connection.c, bus/config-parser.c: change to
	match change in how policy works
	* dbus/dbus-internals.h: mark assert_not_reached as
	__attribute((noreturn))__
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-connection.c (dbus_connection_flush): don't spin on
	the connection if it's disconnected
	* bus/activation.c (bus_activation_service_created): use new
	transaction features to roll back removal of pending activation if
	we don't successfully create the service after all. Don't remove
	pending activation if the function fails.
	* dbus/dbus-list.c (_dbus_list_insert_before_link)
	(_dbus_list_insert_after_link): new code to facilitate
	services.c fixes
	* dbus/dbus-hash.c (_dbus_hash_table_insert_string_preallocated):
	new functionality, so we can preallocate the ability to insert
	into a hash table.
	* bus/connection.c (bus_transaction_add_cancel_hook): new function
	allowing us to put custom hooks in a transaction to be used for
	cancelling said transaction
	* doc/dbus-specification.sgml: add some discussion of secondary
	service owners, and disallow zero-length service names
	* bus/services.c (bus_registry_acquire_service): new function,
	splits out part of bus_driver_handle_acquire_service() and fixes
	a bug where we didn't remove the service doing the acquiring
	from the secondary queue if we failed to remove the current owner
	from the front of the queue.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/dispatch.c: lots of fixes
	* dbus/dbus-mainloop.c (_dbus_loop_dispatch): export
	(_dbus_loop_iterate): remove old "quit if no callbacks" code,
	that was crack, broke the test service.
	* dbus/dbus-transport.c (_dbus_transport_open): fix error
	handling to avoid piling up errors if we get a failure on the
	first address.
	* dbus/dbus-internals.c (_dbus_real_assert_not_reached): include
	pid in assertion failures.
	* dbus/dbus-mainloop.c (_dbus_loop_iterate): use static arrays up
	to some fixed size of file descriptor array. Don't return TRUE
	anytime a timeout exists, that led to lots of busy loop silliness
	in the tests.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* test/test-utils.c: use dispatch status function to fix this up
	* bus/connection.c (connection_watch_callback): don't dispatch
	from here
	(connection_timeout_callback): don't dispatch from here
	(bus_connections_setup_connection): set the dispatch status function
	(bus_connection_disconnected): unset it
	* dbus/dbus-mainloop.c (_dbus_loop_queue_dispatch): new function
	used to add a connection to be dispatched
	(_dbus_loop_iterate): do the dispatching at the end of each
	iteration
	* dbus/dbus-connection.c
	(dbus_connection_set_dispatch_status_function): new function
	allowing us to fix up main loop usage
	(_dbus_connection_last_unref): free all the various function
	user data
	(dbus_connection_dispatch): call the DispatchStatusFunction
	whenever this function returns
	(dbus_connection_handle_watch): call DispatchStatusFunction
	(dbus_connection_send_with_reply_and_block): call DispatchStatusFunction
	(reply_handler_timeout): call DispatchStatusFunction
	(dbus_connection_flush): call DispatchStatusFunction
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/Makefile.am: split lists of sources into stuff that goes in
	the library, util functions that go in the lib and are also used
	elsewhere, and util functions that are used in tests/daemon but
	don't go in the lib.
	* dbus/dbus-mainloop.h, dbus/dbus-mainloop.c: move bus/loop.[hc]
	here so it can be used in test binaries also
 | 
| | 
| 
| 
| 
| 
| 
|  | 
* bus/loop.h, bus/loop.c: make the mainloop an object so we can
	have multiple ones
	* bus/*.[hc]: adapt to mainloop change
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/connection.c (bus_transaction_send_error_reply): set sender
	service for the error, and unref the reply on success
	* bus/activation.c: convert to use BusTransaction so OOM can be
	handled correctly
	(bus_activation_service_created): set sender of the message
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Fix some annoying DBusString API and fix all affected code.
	* dbus/dbus-string.c (_dbus_string_init): get rid of annoying
	max_length argument
	(_dbus_string_get_data): change to return string instead of using
	an out param
	(_dbus_string_get_const_data): ditto
	(_dbus_string_get_data_len): ditto
	(_dbus_string_get_const_data_len): ditto
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* throughout - add more _DBUS_ASSERT_ERROR_IS_CLEAR
	* configure.in: add --with-xml option to specify XML library,
	right now only libxml is supported.
	* bus/config-loader-libxml.c, config-parser.c: sync some minor
	nonworking code between home and work, still just stubs
 | 
| | 
| 
| 
| 
| 
| 
|  | 
* bus/connection.c (bus_connections_setup_connection): set up
	the "can this user connect" function, but it always returns
	TRUE until we have a config file parser so we can have a config
	file that allows connections.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/policy.c, bus/bus.c, bus/connection.c: implement allow/deny
	policies code
	* dbus/dbus-hash.h: add ULONG hash keys
	* dbus/dbus-sysdeps.c (_dbus_get_groups): new
	(_dbus_get_group_id): new function
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/connection.c (bus_connection_send_oom_error): assert that
	message has a sender
	(connection_execute_transaction): ditto
	(bus_connection_preallocate_oom_error): fix to set the sender, and
	set recipient to the destination service, not the bus driver
	* bus/policy.c: hacking
	* dbus/dbus-message.c (dbus_message_service_is): new function
	(dbus_message_sender_is): new
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
All tests pass, no memleaks, no valgrind complaints.
	* bus/test.c: refcount handler_slot
	* bus/connection.c (bus_connections_new): refcount
	connection_data_slot
	* dbus/dbus-auth-script.c (_dbus_auth_script_run): delete unused
	bytes so that auth scripts pass.
	* bus/dispatch.c: init message_handler_slot so it gets allocated
	properly
	* bus/dispatch.c (message_handler_slot_ref): fix memleak
	* dbus/dbus-server-debug-pipe.c (_dbus_server_debug_pipe_new):
	dealloc server_pipe_hash when no longer used for benefit of
	leak checking
	* dbus/dbus-auth.c (process_command): memleak fix
	* bus/dispatch.c (check_hello_message): memleak fix
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-watch.c (_dbus_watch_new): handle failure to malloc
	the watch
	* dbus/dbus-server-debug-pipe.c (_dbus_transport_debug_pipe_new):
	add some missing dbus_set_result
	* bus/dispatch.c (bus_dispatch_add_connection): handle failure to
	alloc the DBusMessageHandler
	* dbus/dbus-transport.c (_dbus_transport_disconnect): don't ref
	the transport here, since we call this from the finalizer; it
	resulted in a double-finalize.
	* dbus/dbus-transport.c (_dbus_transport_disconnect): fix a bug
	where we tried to use transport->connection that was NULL,
	happened when transport was disconnected early on due to OOM
	* bus/*.c: adapt to handle OOM for watches/timeouts
	* dbus/dbus-transport-unix.c: port to handle OOM during
	watch handling
	* dbus/dbus-auth.c (_dbus_auth_get_unused_bytes): return a
	reference to unused bytes instead of a copy
	* dbus/dbus-server.c (dbus_server_handle_watch): return FALSE for
	out of memory
	* dbus/dbus-connection.c (dbus_connection_handle_watch): return
	FALSE on OOM
	* dbus/dbus-timeout.c (dbus_timeout_handle): return FALSE for out
	of memory
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-bus.c (ensure_bus_data): handle failure to set
	connection data
	* dbus/dbus-memory.c (_dbus_initialize_malloc_debug): support
	DBUS_MALLOC_BACKTRACES to print trace when failing an alloc
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-string.c (_dbus_string_validate_utf8): oops, unbreak
	this. always run the test suite before commit...
	* bus/*: adapt to DBusConnection API changes
	* glib/dbus-gmain.c: adapt to DBusConnection API changes,
	requires renaming stuff to avoid dbus_connection_dispatch name
	conflict.
	* dbus/dbus-transport.c (_dbus_transport_queue_messages): new
	function
	* dbus/dbus-message.c (_dbus_message_loader_queue_messages):
	separate from _dbus_message_loader_return_buffer()
	* dbus/dbus-connection.c (dbus_connection_get_n_messages): remove
	this, because it's now always broken to use; the number of
	messages in queue vs. the number still buffered by the message
	loader is undefined/meaningless. Should use
	dbus_connection_get_dispatch_state().
	(dbus_connection_dispatch): rename from
	dbus_connection_dispatch_message
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Oops - test code was only testing failure of around 30 of the
	mallocs in the test path, but it turns out there are 500+
	mallocs. I believe this was due to misguided linking setup such
	that there was one copy of dbus_malloc etc. in the daemon and one
	in the shared lib, and only daemon mallocs were tested. In any
	case, the test case now tests all 500+ mallocs, and doesn't pass
	yet, though there are lots of fixes in this patch.
	* dbus/dbus-connection.c (dbus_connection_dispatch_message): fix
	this so that it doesn't need to allocate memory, since it
	has no way of indicating failure due to OOM (and would be
	annoying if it did).
	* dbus/dbus-list.c (_dbus_list_pop_first_link): new function
	* bus/Makefile.am: rearrange to create two self-contained
	libraries, to avoid having libraries with overlapping symbols.
	that was resulting in weirdness, e.g. I'm pretty sure there
	were two copies of global static variables.
	* dbus/dbus-internals.c: move the malloc debug stuff to
	dbus-memory.c
	* dbus/dbus-list.c (free_link): free list mempool if it becomes
	empty.
	* dbus/dbus-memory.c (_dbus_disable_mem_pools): new function
	* dbus/dbus-address.c (dbus_parse_address): free list nodes
	on failure.
	* bus/dispatch.c (bus_dispatch_add_connection): free
	message_handler_slot when no longer using it, so
	memory leak checkers are happy for the test suite.
	* dbus/dbus-server-debug-pipe.c (debug_finalize): free server name
	* bus/bus.c (new_connection_callback): disconnect in here if
	bus_connections_setup_connection fails.
	* bus/connection.c (bus_connections_unref): fix to free the
	connections
	(bus_connections_setup_connection): if this fails, don't
	disconnect the connection, just be sure there are no side
	effects.
	* dbus/dbus-string.c (undo_alignment): unbreak this
	* dbus/dbus-auth.c (_dbus_auth_unref): free some stuff we were
	leaking
	(_dbus_auth_new): fix the order in which we free strings
	on OOM failure
	* bus/connection.c (bus_connection_disconnected): fix to
	not send ServiceDeleted multiple times in case of memory
	allocation failure
	* dbus/dbus-bus.c (dbus_bus_get_base_service): new function to
	get the base service name
	(dbus_bus_register_client): don't return base service name,
	instead store it on the DBusConnection and have an accessor
	function for it.
	(dbus_bus_register_client): rename dbus_bus_register()
	* bus/dispatch.c (check_hello_message): verify that other
	connections on the bus also got the correct results, not
	just the one sending hello
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Make it pass the Hello handling test including all OOM codepaths.
	Now to do other messages...
	* bus/services.c (bus_service_remove_owner): fix crash when
	removing owner from an empty list of owners
	(bus_registry_ensure): don't leave service in the list of
	a connection's owned services if we fail to put the service
	in the hash table.
	* bus/connection.c (bus_connection_preallocate_oom_error): set
	error flag on the OOM error.
	* dbus/dbus-connection.c (_dbus_connection_new_for_transport):
	handle _dbus_transport_set_connection failure
	* dbus/dbus-transport-unix.c (_dbus_transport_new_for_fd): modify
	to create watches up front and simply enable/disable them as
	needed.
	(unix_connection_set): this can now fail on OOM
	* dbus/dbus-timeout.c, dbus/dbus-watch.c: add concept
	of enabling/disabling a watch or timeout.
	* bus/loop.c (bus_loop_iterate): don't touch disabled
	watches/timeouts
	* glib/dbus-gmain.c: adapt to enable/disable watches and timeouts
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/dispatch.c (bus_dispatch_test): OK, now finally actually
	write useful test code, after all that futzing around ;-)
	Test does not yet pass because we can't handle OOM in
	_dbus_transport_messages_pending (basically,
	dbus_connection_preallocate_send() does not prealloc the write
	watch). To fix this, I think we need to add new stuff to
	set_watch_functions, namely a SetEnabled function so we can alloc
	the watch earlier, then enable it later.
	* dbus/Makefile.am (libdbus_convenience_la_SOURCES): move
	dbus-memory.c to the convenience lib
	* bus/test.c: rename some static functions to keep them clearly
	distinct from stuff in connection.c. Handle client disconnection.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-memory.c: add a "detect buffer overwrites on free"
	cheesy hack
	* dbus/dbus-transport-debug.c: rework this a good bit to be
	less complicated. hopefully still works.
	* dbus/dbus-server-debug.c (handle_new_client): remove timeout
	manually
	* glib/dbus-gmain.c (timeout_handler): don't remove timeout
	after running it
	* dbus/dbus-message.c (dbus_message_copy): rename from
	dbus_message_new_from_message, fix it up to copy
	all the message fields, add test case
	* bus/dispatch.c (bus_dispatch_test): add some more test code,
	not quite passing yet
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-timeout.c (_dbus_timeout_list_set_functions): handle
	out of memory
	* dbus/dbus-watch.c (_dbus_watch_list_set_functions): handle out
	of memory
	* dbus/dbus-connection.h: Make AddWatchFunction and
	AddTimeoutFunction return a bool so they can fail on out-of-memory
	* bus/bus.c (bus_context_new): set up timeout handlers
	* bus/connection.c (bus_connections_setup_connection): set up
	timeout handlers
	* glib/dbus-gmain.c: adapt to the fact that set_functions stuff
	can fail
	* bus/bus.c (bus_context_new): adapt to changes
	* bus/connection.c: adapt to changes
	* test/watch.c: adapt to DBusWatch changes
	* bus/dispatch.c (bus_dispatch_test): started adding this but
	didn't finish
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Throughout: purge global variables, introduce BusActivation,
	BusConnections, BusRegistry, etc. objects instead.
	* bus/bus.h, bus/bus.c: introduce BusContext as a global
	message bus object
	* test/Makefile.am (TEST_BINARIES): disable bus-test for now,
	going to redo this a bit differently I think
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Mega-patch that gets the message bus daemon initially handling
	out-of-memory. Work still needed. Also lots of random
	moving stuff to DBusError instead of ResultCode.
	* dbus/dbus-list.c (_dbus_list_length_is_one): new function
	* dbus/dbus-connection.c
	(dbus_connection_send_with_reply_and_block): use DBusError
	* dbus/dbus-bus.c: adapt to API changes, make it use DBusError not
	DBusResultCode
	* dbus/dbus-connection.c (dbus_connection_send): drop the result
	code here, as the only failure possible is OOM.
	* bus/connection.c (bus_connection_disconnect):
	rename bus_connection_disconnected as it's a notification only
	* bus/driver.c (bus_driver_handle_acquire_service): don't free
	"name" on get_args failure, should be done by get_args;
	don't disconnect client for bad args, just return an error.
	(bus_driver_handle_service_exists): ditto
	* bus/services.c (bus_services_list): NULL-terminate returned array
	* bus/driver.c (bus_driver_send_service_lost)
	(bus_driver_send_service_acquired): send messages from driver to a
	specific client to the client's unique name, not to the broadcast
	service.
	* dbus/dbus-message.c (decode_header_data): reject messages that
	contain no name field
	(_dbus_message_get_client_serial): rename to
	dbus_message_get_serial and make public
	(_dbus_message_set_serial): rename from set_client_serial
	(_dbus_message_set_reply_serial): make public
	(_dbus_message_get_reply_serial): make public
	* bus/connection.c (bus_connection_foreach): allow stopping
	iteration by returning FALSE from foreach function.
	* dbus/dbus-connection.c (dbus_connection_send_preallocated)
	(dbus_connection_free_preallocated_send)
	(dbus_connection_preallocate_send): new API for sending a message
	without possibility of malloc failure.
	(dbus_connection_send_message): rename to just
	dbus_connection_send (and same for whole function family)
	* dbus/dbus-errors.c (dbus_error_free): make this reinit the error
	* dbus/dbus-sysdeps.c (_dbus_exit): new function
	* bus/activation.c: handle/return errors
	* dbus/dbus-errors.h: add more DBUS_ERROR #define
	* dbus/dbus-sysdeps.c (_dbus_directory_open) (_dbus_file_get_contents)
	(_dbus_directory_get_next_file): use DBusError instead of DBusResultCode
	(_dbus_result_from_errno): move to this file
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-threads.c:
	* dbus/dbus-threads.h:
	Add condvars. Remove static mutext from API.
	Implement static mutexes by initializing them from threads_init.
	* glib/dbus-gthread.c:
	* qt/dbus-qthread.cpp:
	Update with the thread api changes.
	* dbus/dbus-list.c:
	* dbus/dbus-list.h:
	Turn StaticMutex into normal mutex + init function.
	Export new functions _dbus_list_alloc_link, _dbus_list_free_link,
	_dbus_list_append_link, _dbus_list_prepend_link
	* dbus/dbus-sysdeps.c:
	* dbus/dbus-sysdeps.h:
	New type dbus_atomic_t, and new functions _dbus_atomic_inc,
	_dbus_atomic_dec. Only slow fallback implementation at the moment.
	* dbus/dbus-protocol.h:
	Add DBUS_MESSAGE_LOCAL_DISCONNECT define
	* dbus/dbus-message.c:
	Make ref/unref atomic.
	Fix some docs.
	* dbus/dbus-connection-internal.h:
	* dbus/dbus-connection.c:
	* dbus/dbus-connection.h:
	Make threadsafe.
	Change _peek to _borrow,_return & _steal_borrowed.
	Change disconnect callback to event.
	Make dbus_connection_dispatch_messages reentrant.
	* dbus/dbus-transport.c:
	Don't ref the connection on calls to the transport
	implementation.
	* dbus/dbus-message-handler.c:
	Make threadsafe.
	* glib/dbus-gmain.c:
	Don't use peek_message anymore
	* test/Makefile.am:
	* test/debug-thread.c:
	* test/debug-thread.h:
	Simple thread implementation that asserts() on deadlocks in
	single-threaded code.
	* test/bus-test.c:
	(main) Call debug_threads_init.
	* test/watch.c:
	Use disconnect message instead of disconnect callback.
	* bus/connection.c:
	* bus/connection.h:
	Don't call dbus_connection_set_disconnect_function. Instead export
	bus_connection_disconnect.
	* bus/dispatch.c:
	Call bus_connection_disconnect when we get a disconnected message.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/Makefile.am:
	Add utils.[ch]
	* bus/connection.c: (bus_connection_foreach):
	Fix a warning.
	* bus/desktop-file.c: (grow_lines_in_section), (grow_sections),
	(unescape_string), (new_section), (parse_section_start),
	(parse_key_value), (report_error), (bus_desktop_file_load),
	(bus_desktop_file_get_string):
	* bus/desktop-file.h:
	Use DBusError for error reporting.
	* bus/dispatch.c: (send_one_message),
	(bus_dispatch_message_handler):
	* bus/driver.c: (bus_driver_send_service_deleted),
	(bus_driver_send_service_created), (bus_driver_send_service_lost),
	(bus_driver_send_service_acquired), (bus_driver_handle_hello),
	(bus_driver_send_welcome_message),
	(bus_driver_handle_list_services),
	(bus_driver_handle_acquire_service),
	(bus_driver_handle_service_exists):
	* bus/loop.c: (bus_loop_run):
	* bus/main.c:
	Use BUS_HANDLE_OOM instead of _DBUS_HANDLE_OOM.
	* bus/utils.c: (bus_wait_for_memory):
	* bus/utils.h:
	New files with general utility functions.
	* dbus/dbus-internals.h:
	Remove _DBUS_HANDLE_OOM.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/Makefile.am:
	* bus/connection.c: (connection_disconnect_handler),
	(connection_watch_callback), (bus_connection_setup):
	* bus/dispatch.c: (send_one_message),
	(bus_dispatch_broadcast_message), (bus_dispatch_message_handler),
	(bus_dispatch_add_connection), (bus_dispatch_remove_connection):
	* bus/dispatch.h:
	* bus/driver.c: (bus_driver_send_service_deleted),
	(bus_driver_send_service_created), (bus_driver_handle_hello),
	(bus_driver_send_welcome_message),
	(bus_driver_handle_list_services), (bus_driver_remove_connection),
	(bus_driver_handle_message):
	* bus/driver.h:
	Refactor code, put the message dispatching in its own file. Use
	_DBUS_HANDLE_OOM. Also send ServiceDeleted messages when a client
	is disconnected.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/connection.c: (bus_connection_foreach):
	* bus/connection.h:
	Add new bus_connection_foreach function.
	* bus/driver.c: (send_one_message), (bus_driver_broadcast_message):
	Add function that broadcasts a message to all clients.
	(bus_driver_send_service_created), (bus_driver_handle_hello),
	(bus_driver_send_welcome_message),
	(bus_driver_handle_list_services), (bus_driver_message_handler):
	Implement functions that take care of listing services, and notifying
	clients when new services are created.
	* bus/services.c: (bus_services_list):
	* bus/services.h:
	Add new function that returns an array of strings with the currently
	registered services.
	* glib/dbus-glib.h:
	* glib/dbus-gmain.c:
	Update copyright year.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/Makefile.am:
	Add driver.[ch]
	* bus/connection.c: (connection_disconnect_handler):
	Remove the connection from the bus driver's list.
	(connection_watch_callback): Dispatch messages.
	(free_connection_data): Free connection name.
	(bus_connection_setup): Add connection to the bus driver's list.
	(bus_connection_remove_owned_service):
	(bus_connection_set_name), (bus_connection_get_name):
	Add functions for setting and getting the connection's name.
	* bus/connection.h:
	Add function headers.
	* bus/driver.c: (create_unique_client_name),
	(bus_driver_handle_hello_message),
	(bus_driver_send_welcome_message), (bus_driver_message_handler),
	(bus_driver_add_connection), (bus_driver_remove_connection):
	* bus/driver.h:
	* bus/main.c:
	* bus/services.c: (bus_service_free):
	* bus/services.h:
	New file that handles communication and registreation with the bus
	itself.
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
* dbus/dbus-connection.c (dbus_connection_unref): disconnect the
	connection if it hasn't been already.
	* dbus/dbus-connection.h: kill off the idea of an ErrorFunction,
	replace with DisconnectFunction.
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
* bus/connection.c: (connection_error_handler),
	(bus_connection_setup):
	* bus/main.c: (main):
	Make sure that the DBusConnectionData struct is NULLed
	out to prevent a segfault.
	* dbus/dbus-errors.c: (dbus_result_to_string):
	* dbus/dbus-errors.h:
	* dbus/dbus-message.c: (dbus_message_get_fields),
	(dbus_message_get_fields_valist), (_dbus_message_test):
	* dbus/dbus-message.h:
	Make dbus_message_get_fields return a result code so we can
	track invalid fields as well as oom.
 | 
|   
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   | 
* bus/connection.c: implement routines for handling connections,
	first thing is keeping a list of owned services on each connection
	and setting up watches etc.
	* bus/services.c: implement a mapping from service names to lists
	of connections
	* dbus/dbus-hash.c: add DBUS_HASH_POINTER
	* dbus/dbus-threads.c (dbus_static_mutex_lock): add functions
	to use static mutexes for global data
	* dbus/dbus-connection.c (dbus_connection_set_data): add new
	collection of functions to set/get application-specific data
	on the DBusConnection.
 |