[Rpm-maint] [rpm-software-management/rpm] Stop blocking when GPG process dies prematurely (RhBug:1746353) (#938)
Michal Domonkos
notifications at github.com
Mon Nov 18 08:35:31 UTC 2019
dmnks commented on this pull request.
> @@ -276,7 +282,26 @@ static int runGPG(sigTarget sigt, const char *sigfile)
rpmPopMacro(NULL, "__plaintext_filename");
rpmPopMacro(NULL, "__signature_filename");
+ /* The child GPG process may terminate without ever opening the pipe (such
+ * as when the key is expired), causing our parent process to get forever
+ * stuck on the Fopen() call below (see fifo(7) for details). To fix that,
+ * we need to let the underlying open(2) unblock when SIGCHLD is received,
+ * by registering a no-op handler, so here we go: */
+ struct sigaction act;
+ memset(&act, '\0', sizeof(act));
+ act.sa_handler = &gpg_sa_handler;
+ act.sa_flags = 0; /* Make sure we don't have SA_RESTART */
+ sigaction(SIGCHLD, &act, NULL);
Oh, restoring the handler is something that I just didn't realize at all. Thanks for that.
Yeah, it really is superfluous :) I wanted to signify that `SA_RESTART` is not set, but since we `memset()` the whole struct right above, it's really not needed and I'll remove it as well.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/rpm-software-management/rpm/pull/938#discussion_r347250293
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rpm.org/pipermail/rpm-maint/attachments/20191118/c4ee977d/attachment.html>
More information about the Rpm-maint
mailing list