From: Jeff King Date: Tue, 14 Jun 2016 21:50:19 GMT Subject: Re: [PATCHv3] gpg-interface: check gpg signature creation status Message-ID: <20160614215019.GB22334@sigill.intra.peff.net> In-Reply-To: On Tue, Jun 14, 2016 at 11:13:54AM -0700, Junio C Hamano wrote: > Michael J Gruber writes: > > > bottom = signature->len; > > - len = strbuf_read(signature, gpg.out, 1024); > > + strbuf_read(signature, gpg.out, 1024); > > + strbuf_read(&err, gpg.err, 0); > > Hmmmm, isn't this asking for a deadlock? When GPG spews more than > what would fit in a pipe buffer to its standard error (hence gets > blocked), its standard output may not complete, and the we would get > stuck by attempting to read from gpg.out, failing to reach the other > strbuf_read() that would unblock GPG by reading from gpg.err? Yeah, it definitely is a deadlock. I think we'd need a select loop to read into multiple strbufs at once (we can't use "struct async" because that might happen in another process). -Peff