diff options
author | Timo Teräs <timo.teras@iki.fi> | 2016-12-02 16:14:02 +0000 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2016-12-02 16:14:02 +0000 |
commit | 86a7194908b0f8c2796f5a0fc00cd13c6c00bb14 (patch) | |
tree | ed571f0ea311882b37fa6851294595aef12e4653 /main/fakeroot/fakeroot-msgrcv-signal.patch | |
parent | 6942f42baa6d305430f75e6f1ba4b407d065499d (diff) | |
download | aports-86a7194908b0f8c2796f5a0fc00cd13c6c00bb14.tar.bz2 aports-86a7194908b0f8c2796f5a0fc00cd13c6c00bb14.tar.xz |
main/fakeroot: fix signal handling for msgrcv
Retry msgrcv in case signal arrives, otherwise we return bad
values from libc hooks. According to docs msgrcv is never restarted
automatically regardless of SA_RESTART flag, so do it in the code.
Incidentally mksquashfs sets up SIGALRM to fire relatively often
so it is good at trigger this race with different weird error
messages.
Diffstat (limited to 'main/fakeroot/fakeroot-msgrcv-signal.patch')
-rw-r--r-- | main/fakeroot/fakeroot-msgrcv-signal.patch | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/main/fakeroot/fakeroot-msgrcv-signal.patch b/main/fakeroot/fakeroot-msgrcv-signal.patch new file mode 100644 index 0000000000..5def144dd8 --- /dev/null +++ b/main/fakeroot/fakeroot-msgrcv-signal.patch @@ -0,0 +1,12 @@ +--- fakeroot-1.21/communicate.c.orig 2016-12-02 17:46:15.754013876 +0200 ++++ fakeroot-1.21/communicate.c 2016-12-02 17:47:42.755155118 +0200 +@@ -553,7 +553,7 @@ + l=msgrcv(msg_get, + (struct my_msgbuf*)buf, + sizeof(*buf)-sizeof(buf->mtype),0,0); +- while((buf->serial!=serial)||buf->pid!=pid); ++ while((l==-1&&errno==EINTR)||(buf->serial!=serial)||buf->pid!=pid); + + semaphore_down(); + + |