
On 08/28/2014 02:26 PM, David Marchand wrote:
I'm not sure, though, what to do with the first point (race between libvirt creating the socket to see that it exists and ivshmem disconnecting). Maybe libvirt could do this (if QEMU would support it):
1: try to create the socket (if it exists, continue with 4)
2: connect to the socket
3: if connecting fails, goto 1;
4: if libvirt was the one who created the socket, start the server and pass the FD of the socket to it
5: start qemu and pass the socket to it (qemu already supports that with other devices like netdevs, etc.
This would take care of all three points. No race, no permission issues, nothing.
What do you think?
- Mmm, I had felt that there could be a race in the socket check, yes. The LISTEN_FDS support in the server is not that big of a change. I think I can take care of that.
- Did not think of the other points. I think there is still some problem with your proposition, I need more time to think about it (may be some prototyping to be sure).
I had misunderstood something about listen()/connect(). Ok, your proposition looks good to me. At least for the server, this should be transparent as long as the server handles LISTEN_FDS env variable or an option to tell it which fd he should listen on. For the ivshmem part in QEMU itself, I think adding a property to ivshmem pci class should do the trick, will see if I (or Maxime) can do this. Are there any other points concerning the server ? -- David Marchand