poor console performance if dbus-launch run with "--exit-with-session"

Bug #812913 reported by James Hunt
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
dbus (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

Running dbus-launch from the console results in very poor performance (keyboard keys need to be held down for multiple seconds for an echo of that character to appear on the console).

To recreate:

  killall dbus-launch &>/dev/null
  eval `dbus-launch --auto-syntax --exit-with-session`
  start typing :-)

Note that the problem only occurs with "--exit-with-session": This invocation is fine:

  killall dbus-launch &>/dev/null
  eval `dbus-launch --auto-syntax`

Problem appears to be related to function tools/dbus-launch.c:kill_bus_when_session_ends() which is calling select(2) followed by read(2) in an infinite loop (until the shell exits) for all input the user types.

Poor performance observed in oneiric VM (kvm).

Revision history for this message
atimonin (atimonin) wrote :

The same problem affects me also (I login to remote server via ssh with X11 forwarding).
The real problem is that dbus-launch is "eating" chars from stdin (tty) while waiting for SIGHUP.
I don't understand what for it's reading stdin while waiting for SIGHUP...
Below is a smple code:
------------
if (tty_fd >= 0)
        {
          if (FD_ISSET (tty_fd, &read_set))
            {
              int bytes_read;
              char discard[512];

              verbose ("TTY ready for reading\n");

              bytes_read = read (tty_fd, discard, sizeof (discard));

              verbose ("Read %d bytes from TTY errno = %d\n",
                       bytes_read, errno);

              if (bytes_read == 0)
                kill_bus_and_exit (0); /* EOF */
              else if (bytes_read < 0 && errno != EINTR)
                {
                  /* This shouldn't happen I don't think; to avoid
                   * spinning on the fd forever we exit.
                   */
                  fprintf (stderr, "dbus-launch: error reading from stdin: %s\n",
                           strerror (errno));
                  kill_bus_and_exit (0);
                }
            }
          else if (FD_ISSET (tty_fd, &err_set))
            {
              verbose ("TTY has error condition\n");

              kill_bus_and_exit (0);
            }
        }
    }
--------------

Revision history for this message
atimonin (atimonin) wrote :
Revision history for this message
Mörgæs (moergaes) wrote :

According to the Freedesktop link it's fixed.

Changed in dbus (Ubuntu):
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.