• Роман Донченко's avatar
    Avoid killing all available processes if an X error arrives early on · 3be60637
    Роман Донченко authored
    The timeline of events in dbus-launch's main process goes something like this:
    
    * do initial X calls
    [1]
    * do some other stuff
    * fork
        (child process starts doing some other stuff)
    * return "intermediate parent" pid from fork()
    * obtain bus daemon pid from bus_pid_to_launcher_pipe
    [2]
    * do things that might include X11 calls or killing the dbus-daemon
    
    Meanwhile, the "babysitter" child goes like this:
    
    * return 0 from fork()
    [3]
    * obtain bus daemon pid from parent process via bus_pid_to_babysitter_pipe
    [4]
    * do things that might include X11 calls or killing the bus daemon
    
    Before [1] or [3], the right thing to do about an X error is to just
    exit. The current implementation called kill(-1) first, which is
    undesirable: it kills unrelated processes. With this change, we
    just exit.
    
    After [2] or [4], the right thing to do is to kill the dbus-daemon,
    and that's what the existing code did.
    
    Between [1] and [2], or between [3] and [4], there is no correct thing
    that we can do immediately: we would have to wait for the end of the
    "critical section", *then* kill the dbus-daemon. This has not yet been
    implemented, so this patch relies for its correctness on the fact that
    there are no libX11 calls between those points, so we cannot receive
    an X error between them.
    
    dbus-launch deserves more comments, or a reimplementation that is easier to
    understand, but this change is certainly better than nothing.
    
    [Commit message added, summarizing reviewers' comments -smcv]
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=74698
    Reviewed-by: Simon McVittie
    Reviewed-by: Thiago Macieira
    3be60637
Name
Last commit
Last update
bus Loading commit data...
cmake Loading commit data...
dbus Loading commit data...
doc Loading commit data...
m4 Loading commit data...
test Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
AUTHORS Loading commit data...
COPYING Loading commit data...
ChangeLog Loading commit data...
ChangeLog.pre-1-0 Loading commit data...
ChangeLog.pre-1-2 Loading commit data...
Doxyfile.in Loading commit data...
HACKING Loading commit data...
INSTALL Loading commit data...
Makefile.am Loading commit data...
Makefile.cvs Loading commit data...
NEWS Loading commit data...
NEWS.pre-1-0 Loading commit data...
NEWS.pre-1-2 Loading commit data...
README Loading commit data...
README.cmake Loading commit data...
README.cygwin Loading commit data...
README.launchd Loading commit data...
README.valgrind Loading commit data...
README.win Loading commit data...
README.wince Loading commit data...
autogen.sh Loading commit data...
cleanup-man-pages.sh Loading commit data...
configure.ac Loading commit data...
dbus-1-uninstalled.pc.in Loading commit data...
dbus-1.pc.in Loading commit data...