From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZrSV3-0000je-RR for qemu-devel@nongnu.org; Wed, 28 Oct 2015 11:18:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZrSUy-0000AI-Qb for qemu-devel@nongnu.org; Wed, 28 Oct 2015 11:18:53 -0400 Received: from relay.parallels.com ([195.214.232.42]:52993) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZrSUx-000090-CF for qemu-devel@nongnu.org; Wed, 28 Oct 2015 11:18:48 -0400 References: <1445968123-1773-1-git-send-email-den@openvz.org> <1445968123-1773-4-git-send-email-den@openvz.org> <20151027191112.4255.20231@loki> <562FCCF5.7090807@openvz.org> <20151027194928.4255.73297@loki> From: "Denis V. Lunev" Message-ID: <5630E74B.90303@openvz.org> Date: Wed, 28 Oct 2015 18:18:35 +0300 MIME-Version: 1.0 In-Reply-To: <20151027194928.4255.73297@loki> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/3] qga: set file descriptor in qmp_guest_file_open non-blocking on Win32 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Michael Roth Cc: Olga Krishtal , qemu-devel@nongnu.org, Stefan Weil On 10/27/2015 10:49 PM, Michael Roth wrote: > Quoting Denis V. Lunev (2015-10-27 14:13:57) >> On 10/27/2015 10:11 PM, Michael Roth wrote: >>> Quoting Denis V. Lunev (2015-10-27 12:48:43) >>>> From: Olga Krishtal >>>> >>>> Set fd non-blocking to avoid common use cases (like reading from a >>>> named pipe) from hanging the agent. This was missed in the original >>>> code. >>>> >>>> The patch introduces analog of qemu_set_non/block for HANDLES. >>>> The usage of handles in qemu_set_non/block is impossible, because for >>>> win32 there is a difference between file discriptors and file handles, >>>> and all file ops are made via Win32 api. >>> If this is specific to HANDLEs, why do we need to cast back and forth >>> between int64_t and HANDLE? I haven't build tested, but it seems like >>> this would break for 32-bit mingw builds. >>> >>> I would define these as qemu_set_*_by_handle(HANDLE fh, ...) instead >>> and make them win32 only. If someone wants to introduce a FILE* >>> variant for posix they can introduce it as >>> qemu_set_*_by_handle(FILE *fh, ...) rather than us needing to >>> abstract away the handle type. >> may be it would be better to add static function for this in QGA for now? > I'd be fine with either approach. It could be generally useful for > other w32 users. But if we're thinking about dropping the QGA > use case soon then maybe having it live in QGA is best. > >> I am eager to drop this code at once for Posix and Windows and >> switch to GLIB like was done for guest exec. > You mean switching all the guest-file-* interfaces to glib? I > took a stab at it once for w32 guest-file-* implementation, but > one issue I hit was that I couldn't figure out how to implement > guest-file-seek to report back the absolute position in the > file, or whether or not we'd hit EOF. You can set position > via g_io_channel_seek_position(), but if they hit EOF, or are > using relative offsets via G_SEEK_CUR, you don't really know > the position and glib doesn't seem to provide a way to query > that. We could maybe work around it by tracking it manually > via guest-file-* calls but that sounds terrible. > > Hopefully I just missed something though. Also couldn't figure > out how you can get glib to report that you'd already seeked > to EOF. I had some comments about it in my WIP: > > https://github.com/mdroth/qemu/commit/8b2e5c69266bb48e492af9826122c2aaa4a82197#diff-7f29c3e51a7b387cc7717e7be4f6e205R525 I see. Then we can have platform specific open code and use FILE* interface for the rest. According to Olga HANDLE -> fd -> FILE* transition is possible. At least we will try :) Den