ACK. Unrelated, but data->channel seems to be leaked. Christophe On Fri, Jan 24, 2014 at 04:55:58PM +0000, Daniel P. Berrange wrote: > Libvirt uses gnulib for making winsock look like POSIX > sockets. This means that in the libvirt event handle > callbacks the application will be given a file descriptor > rather than a winsock HANDLE object. The g_io_channel_unix_new > method will detect that it is an FD and delegate to the > g_io_channel_win32_new_fd method. Unfortunately the glib Win32 > event loop impl is not very good at dealing with FD objects, > simulating poll() by doing a read() on the FD :-( > > The API docs for g_io_channel_win32_new_fd say > > "All reads from the file descriptor should be done by > this internal GLib thread. Your code should call only > g_io_channel_read()." > > This isn't going to fly for libvirt, since it has zero > knowledge of glib at all, so is just doing normal read(). > > Fortunately we can work around this problem by turning > the FD we get from libvirt back into a HANDLE using the > _get_osfhandle() method. > > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> > --- > src/virt-viewer-events.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/src/virt-viewer-events.c b/src/virt-viewer-events.c > index 216ed93..6d7fe9e 100644 > --- a/src/virt-viewer-events.c > +++ b/src/virt-viewer-events.c > @@ -26,6 +26,9 @@ > #include <string.h> > #include <stdlib.h> > #include <glib.h> > +#ifdef G_OS_WIN32 > +#include <io.h> > +#endif > #include <libvirt/libvirt.h> > > #include "virt-viewer-events.h" > @@ -96,7 +99,12 @@ int virt_viewer_events_add_handle(int fd, > data->events = events; > data->cb = cb; > data->opaque = opaque; > +#ifdef G_OS_WIN32 > + DEBUG_LOG("Converted fd %d to handle %d", fd, _get_osfhandle(fd)); > + data->channel = g_io_channel_win32_new_socket(_get_osfhandle(fd)); > +#else > data->channel = g_io_channel_unix_new(fd); > +#endif > data->ff = ff; > > DEBUG_LOG("Add handle %d %d %p", data->fd, events, data->opaque); > -- > 1.8.4.2 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
pgp7tuR79miDB.pgp
Description: PGP signature
_______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list