• Simon McVittie's avatar
    _dbus_server_new_for_socket: Iterate over arrays as intended · c9aa00ce
    Simon McVittie authored
    Commit 0c03b505 was 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=89104Signed-off-by: Simon McVittie's avatarSimon McVittie <smcv@collabora.com>
    Reviewed-by: Philip Withnall's avatarPhilip Withnall <withnall@endlessm.com>
    c9aa00ce
dbus-server-socket.c 17 KB