From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:36508) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R0wgc-0004Bk-9s for qemu-devel@nongnu.org; Tue, 06 Sep 2011 10:31:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R0wgb-00084Q-97 for qemu-devel@nongnu.org; Tue, 06 Sep 2011 10:31:38 -0400 Received: from mail-qy0-f180.google.com ([209.85.216.180]:53980) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R0wgb-00084H-6m for qemu-devel@nongnu.org; Tue, 06 Sep 2011 10:31:37 -0400 Received: by qyk31 with SMTP id 31so3514635qyk.4 for ; Tue, 06 Sep 2011 07:31:36 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <4E662EC3.4070603@redhat.com> Date: Tue, 06 Sep 2011 16:31:31 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1314018774-27482-1-git-send-email-aliguori@us.ibm.com> <1314018774-27482-2-git-send-email-aliguori@us.ibm.com> <4E525C5A.8000208@redhat.com> <4E525D87.8010400@codemonkey.ws> <4E525E09.2000107@redhat.com> In-Reply-To: <4E525E09.2000107@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/2] main: switch qemu_set_fd_handler to g_io_add_watch List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Blue Swirl , Anthony Liguori , qemu-devel@nongnu.org On 08/22/2011 03:47 PM, Paolo Bonzini wrote: > On 08/22/2011 03:45 PM, Anthony Liguori wrote: >>> >>> Almost: in Win32 you need to use g_io_channel_win32_new_socket. But >>> indeed on Windows you can only use qemu_set_fd_handler for sockets too. >> >> I think that's really only for read/write though. If you're just >> polling on I/O, it shouldn't matter IIUC. >> >> If someone has a Windows box, they can confirm/deny by using qemu >> -monitor tcp:localhost:1024,socket,nowait with this patch. > > Actually you're right, it works automagically: > > * On Win32, this can be used either for files opened with the MSVCRT > * (the Microsoft run-time C library) _open() or _pipe, including file > * descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr), > * or for Winsock SOCKETs. If the parameter is a legal file > * descriptor, it is assumed to be such, otherwise it should be a > * SOCKET. This relies on SOCKETs and file descriptors not > * overlapping. If you want to be certain, call either > * g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket() > * instead as appropriate. > > So this patch would even let interested people enable exec migration on > Windows. Hmmm, after reading documentation better, this unfortunately is completely broken under Windows, for two reasons: 1) in patch 1/2 you're using the glib pollfds and passing them to select(). Unfortunately under Windows they are special and can only be passed to g_poll(). Unfortunately, this can be fixed by changing the QEMU main loop to use poll() instead of select()... 2) ... because glib IO channels cannot be used just for watches under Windows: /* Create an IO channel for C runtime (emulated Unix-like) file * descriptors. After calling g_io_add_watch() on a IO channel * returned by this function, you shouldn't call read() on the file * descriptor. This is because adding polling for a file descriptor is * implemented on Win32 by starting a thread that sits blocked in a * read() from the file descriptor most of the time. All reads from * the file descriptor should be done by this internal GLib * thread. Your code should call only g_io_channel_read(). */ So, I believe the right solution would be to drop this patch for now and make 1/2 conditional on !_WIN32. Paolo