Michael Albinus skrev 2010-09-25 22.54:
Jan Djärv<address@hidden> writes:
If I test it in a non-X11 terminal, arriving D-Bus messages are
recognised only after pressing a character on the keyboard. So at least
an additional trigger is missing to handle this event in time.
This sounds like a bug. I'll have a look. Is this the same emacs
binary for X and non-X you are running?
Yes.
I don't understand why there is #ifdef subprocess around
add/delete_keyboard_wait_descriptor, but it should not matter.
For testing, I use the example in (info "(dbus) Receiving Method Calls")
In the non-X test case, you must call dbus-send from another terminal,
with the same $DBUS_SESSION_BUS_ADDRESS set.
Ok, I checked in several changes. There where at least two bugs.
First dbusbind didn't process all messages, just one. So things didn't work
well when DBUS had read more than one message into its queue.
This was masked by another bug in xg_select, file descriptors where wrongly
indiocated to be read when they where not. This made things work in X, but
not in a terminal. This bug I fixed in the emacs-23 branch.
I went ahead and added a more general file descriptor handling in process.c,
where you can add a file descriptor for reading or writing and get a callback
when I/O is possible. I then modified dbusbind to use that so writes also are
asynchronous. If the recevier wasn't reading and Emacs writes a lot of DBus
messages, a hang could occur (not that it is very likely, dbus isn't made for
passing a lot of data around).
So please try this version.