mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-07 07:28:01 +02:00
_dbus_server_new_for_socket: Iterate over arrays as intended
Commit0c03b505was meant to clear all the fds indexed by j in [0, n_fds), which socket_disconnect() can't be allowed to close (because on failure the caller remains responsible for closing them); but instead it closed the one we failed to add to the main loop (fd i), repeatedly. Similarly, it was meant to invalidate all the watches indexed by j in [i, n_fds) (the one we failed to add to the main loop and the ones we didn't try to add to the main loop yet), which socket_disconnect() can't be allowed to see (because it would fail to remove them from the main loop and hit an assertion failure); but instead it invalidated fd i, repeatedly. These happen to be the same thing if you only have one fd, resulting in the test-case passing on an IPv4-only system, but failing on a system with both IPv4 and IPv6. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=89104 Signed-off-by: Simon McVittie <smcv@collabora.com> Reviewed-by: Philip Withnall <withnall@endlessm.com> (cherry picked from commitc9aa00ce73)
This commit is contained in:
parent
3e245e15d6
commit
9a8428831b
1 changed files with 4 additions and 4 deletions
|
|
@ -346,16 +346,16 @@ _dbus_server_new_for_socket (DBusSocket *fds,
|
|||
* we return successfully, so don't let socket_disconnect()
|
||||
* close them */
|
||||
for (j = 0; j < n_fds; j++)
|
||||
_dbus_socket_invalidate (&socket_server->fds[i]);
|
||||
_dbus_socket_invalidate (&socket_server->fds[j]);
|
||||
|
||||
/* socket_disconnect() will try to remove all the watches;
|
||||
* make sure it doesn't see the ones that weren't even added
|
||||
* yet */
|
||||
for (j = i; j < n_fds; j++)
|
||||
{
|
||||
_dbus_watch_invalidate (socket_server->watch[i]);
|
||||
_dbus_watch_unref (socket_server->watch[i]);
|
||||
socket_server->watch[i] = NULL;
|
||||
_dbus_watch_invalidate (socket_server->watch[j]);
|
||||
_dbus_watch_unref (socket_server->watch[j]);
|
||||
socket_server->watch[j] = NULL;
|
||||
}
|
||||
|
||||
_dbus_server_disconnect_unlocked (server);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue