From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-f66.google.com (mail-lf1-f66.google.com [209.85.167.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 9B4AE46970F for ; Fri, 29 Nov 2019 12:09:32 +0300 (MSK) Received: by mail-lf1-f66.google.com with SMTP id b20so22060013lfp.4 for ; Fri, 29 Nov 2019 01:09:32 -0800 (PST) Date: Fri, 29 Nov 2019 08:59:39 +0300 From: Konstantin Osipov Message-ID: <20191129055939.GH15149@atlas> References: <20191128204512.19732-1-gorcunov@gmail.com> <20191128204512.19732-2-gorcunov@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191128204512.19732-2-gorcunov@gmail.com> Subject: Re: [Tarantool-patches] [PATCH 1/5] popen: Introduce a backend engine List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Cyrill Gorcunov Cc: tml * Cyrill Gorcunov [19/11/28 23:46]: > +/** > + * popen_write - write data to the child stdin > + * @handle: popen handle > + * @buf: data to write > + * @count: number of bytes to write > + * @flags: a flag representing stdin peer > + * > + * Returns number of bytes written or -1 on error. > + */ > +ssize_t > +popen_write(struct popen_handle *handle, void *buf, > + size_t count, unsigned int flags) > +{ > + if (!popen_may_io(handle, STDIN_FILENO, flags)) > + return -1; > + > + say_debug("popen: %d: write idx %d", > + handle->pid, STDIN_FILENO); > + > + return write(handle->fds[STDIN_FILENO], buf, count); I don't understand, is this blocking or not? If this is blocking, where is it supposed to be called from? Shouldn't you be using a non-blocking I/O like coio does? Besides, even though I realize it's a pipe, so real world return values may be different, but write() can return a partial result even in blocking mode. Why did you choose to design an API which will require caller to handle partial writes? -- Konstantin Osipov, Moscow, Russia