This is another approach to fixing the breakage of "qemu-nbd -c" due to mixing fork with threads. It switches operation of qemu-nbd to threads completely, with the exception of daemonization which is moved as early as possible to avoid conflicts with threads.
Patches 1 and 2 are bugfixes to qemu-nbd, the first more or less unrelated, the second required by the rest of the patch. Patches 3 and 4 change "qemu-nbd -c" to operate within a single process. They are enough to fix the current breakage of "qemu-nbd -c -v", but not enough for "qemu-nbd -c". For that you need patch 5 too, which moves the daemonization to before the block layer is initialized. Patches 6 and 7 remove more warts that are now easily fixed. The patches are large, but unfortunately so is the breakage. Paolo Bonzini (7): nbd: treat EPIPE from NBD_DO_IT as success qemu-nbd: trap SIGTERM qemu-nbd: rename socket variable qemu-nbd: move client to a thread qemu-nbd: print error messages from the daemon through a pipe qemu-nbd: fix socket creation race condition qemu-nbd: open the block device after starting the client thread nbd.c | 7 ++ qemu-nbd.c | 289 +++++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 194 insertions(+), 102 deletions(-) -- 1.7.6.4