Remove main loop.
authorRichard Jones <rjones@trick.home.annexia.org>
Fri, 11 Sep 2009 19:00:30 +0000 (20:00 +0100)
committerRichard Jones <rjones@trick.home.annexia.org>
Mon, 14 Sep 2009 18:12:39 +0000 (19:12 +0100)
commit0a0d743ba80e33e676084f2a254c63d4188857b0
treec55218320ab5bc9dd352f2ea841df2868449a575
parent59b487b7dd9db0dd6f262ca4b39c471c7d6cfa53
Remove main loop.

This commit removes the external main loop, which never worked
and caused a number of bugs.  Requests are now done synchronously,
and if the user wants to have requests issued in the background
or to have a responsive GUI, then they'll just have to use threads.

The big change is to push all reads and writes through two
functions called send_to_daemon (for writes) and recv_from_daemon
(for reads) which operate synchronously.  These functions
read/write whole messages, and also handle checking for EOF
(ie. daemon died) and asynchronous log message events from
qemu (eg. from debug / dmesg printed by the guest).  A more
complete description of how these work can be found in the code.

This code passes a complete run of the tests.

Bugs believed to be fixed by this commit:

  https://bugzilla.redhat.com/show_bug.cgi?id=501888
  internal error: reply callback called twice

  https://bugzilla.redhat.com/show_bug.cgi?id=504418
  In virt-inspector: "download: guestfs_download reply failed, see earlier error messages"

I have tried to avoid reintroducing this:

  https://bugzilla.redhat.com/show_bug.cgi?id=508713
  libguestfs: error: write: Broken pipe (guestfish only)

One other benefit of this is that 'set_busy/end_busy' calls
no longer appear in traces.
guestfs.pod
src/generator.ml
src/guestfs.c
src/guestfs.h