Re: [PATCHv3] gpg-interface: check gpg signature creation status
- From
Jeff King <peff@peff.net>
- Date
- Jun 14, 2016, 21:50 UTC
- Message-ID
- <20160614215019.GB22334@sigill.intra.peff.net>
- In-Reply-To
- <xmqq60tbaba5.fsf@gitster.mtv.corp.google.com>
On Tue, Jun 14, 2016 at 11:13:54AM -0700, Junio C Hamano wrote:
Show 12 quoted lines
> Michael J Gruber <git@drmicha.warpmail.net> 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