From b851a7a5600109c0473d2d5eeed9cc5e677158afd18db417d6ddf5ae5da11738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ismail=20D=C3=B6nmez?= Date: Tue, 7 Jan 2014 08:45:48 +0000 Subject: [PATCH] - Update to version 5.0.5 * Fixes a couple of regression in 5.0.4 - Remove zsh-pipefix.patch, merged upstream OBS-URL: https://build.opensuse.org/package/show/shells/zsh?expand=0&rev=125 --- zsh-5.0.4.tar.bz2 | 3 - zsh-5.0.5.tar.bz2 | 3 + zsh-pipefix.patch | 159 ---------------------------------------------- zsh.changes | 7 ++ zsh.spec | 6 +- 5 files changed, 12 insertions(+), 166 deletions(-) delete mode 100644 zsh-5.0.4.tar.bz2 create mode 100644 zsh-5.0.5.tar.bz2 delete mode 100644 zsh-pipefix.patch diff --git a/zsh-5.0.4.tar.bz2 b/zsh-5.0.4.tar.bz2 deleted file mode 100644 index 45c0356..0000000 --- a/zsh-5.0.4.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e96fe7c9440adb4169fd4b2f0d9a5c8bdf1498423bc2efd2c3205ef7c1de4ee8 -size 3093541 diff --git a/zsh-5.0.5.tar.bz2 b/zsh-5.0.5.tar.bz2 new file mode 100644 index 0000000..9372ce5 --- /dev/null +++ b/zsh-5.0.5.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6624d2fb6c8fa4e044d2b009f86ed1617fe8583c83acfceba7ec82826cfa8eaf +size 3104375 diff --git a/zsh-pipefix.patch b/zsh-pipefix.patch deleted file mode 100644 index 3a0d0f0..0000000 --- a/zsh-pipefix.patch +++ /dev/null @@ -1,159 +0,0 @@ -diff --git a/Src/exec.c b/Src/exec.c -index dccdc2b..4480033 100644 ---- a/Src/exec.c -+++ b/Src/exec.c -@@ -1691,6 +1691,7 @@ execpline2(Estate state, wordcode pcode, - execcmd(state, input, output, how, last1 ? 1 : 2); - else { - int old_list_pipe = list_pipe; -+ int subsh_close = -1; - Wordcode next = state->pc + (*state->pc), pc; - wordcode code; - -@@ -1738,6 +1739,7 @@ execpline2(Estate state, wordcode pcode, - } else { - /* otherwise just do the pipeline normally. */ - addfilelist(NULL, pipes[0]); -+ subsh_close = pipes[0]; - execcmd(state, input, pipes[1], how, 0); - } - zclose(pipes[1]); -@@ -1750,6 +1752,8 @@ execpline2(Estate state, wordcode pcode, - execpline2(state, *state->pc++, how, pipes[0], output, last1); - list_pipe = old_list_pipe; - cmdpop(); -+ if (subsh_close != pipes[0]) -+ zclose(pipes[0]); - } - } - -diff --git a/Test/A05execution.ztst b/Test/A05execution.ztst -index c8320a1..61d24fe 100644 ---- a/Test/A05execution.ztst -+++ b/Test/A05execution.ztst -@@ -202,3 +202,15 @@ F:the bug is still there or it reappeared. See workers-29973 for details. - 0:Check $pipestatus with a known difficult case - >1 0 1 0 0 - F:This similar test was triggering a reproducible failure with pipestatus. -+ -+ { unsetopt MONITOR } 2>/dev/null -+ coproc { read -Et 5 || kill -INT $$ } -+ print -u $ZTST_fd 'This test takes 5 seconds to fail...' -+ { printf "%d\n" {1..20000} } | ( read -E ) -+ print -p done -+ read -Ep -+0:Bug regression: piping a shell construct to an external process may hang -+>1 -+>done -+F:This test checks for a file descriptor leak that could cause the left -+F:side of a pipe to block on write after the right side has exited -diff --git a/Src/exec.c b/Src/exec.c -index 4480033..f16cfd3 100644 ---- a/Src/exec.c -+++ b/Src/exec.c -@@ -2389,7 +2389,7 @@ static void - execcmd(Estate state, int input, int output, int how, int last1) - { - HashNode hn = NULL; -- LinkList args; -+ LinkList args, filelist = NULL; - LinkNode node; - Redir fn; - struct multio *mfds[10]; -@@ -2911,6 +2911,7 @@ execcmd(Estate state, int input, int output, int how, int last1) - flags |= ESUB_KEEPTRAP; - if (type == WC_SUBSH && !(how & Z_ASYNC)) - flags |= ESUB_JOB_CONTROL; -+ filelist = jobtab[thisjob].filelist; - entersubsh(flags); - close(synch[1]); - forked = 1; -@@ -3264,6 +3265,7 @@ execcmd(Estate state, int input, int output, int how, int last1) - - if (is_shfunc) { - /* It's a shell function */ -+ pipecleanfilelist(filelist); - execshfunc((Shfunc) hn, args); - } else { - /* It's a builtin */ -@@ -3342,6 +3344,7 @@ execcmd(Estate state, int input, int output, int how, int last1) - DPUTS(varspc, - "BUG: assignment before complex command"); - list_pipe = 0; -+ pipecleanfilelist(filelist); - /* If we're forked (and we should be), no need to return */ - DPUTS(last1 != 1 && !forked, "BUG: not exiting?"); - DPUTS(type != WC_SUBSH, "Not sure what we're doing."); -diff --git a/Src/jobs.c b/Src/jobs.c -index 371b8eb..a321172 100644 ---- a/Src/jobs.c -+++ b/Src/jobs.c -@@ -1173,6 +1173,30 @@ addfilelist(const char *name, int fd) - zaddlinknode(ll, jf); - } - -+/* Clean up pipes no longer needed associated with a job */ -+ -+/**/ -+void -+pipecleanfilelist(LinkList filelist) -+{ -+ LinkNode node; -+ -+ if (!filelist) -+ return; -+ node = firstnode(filelist); -+ while (node) { -+ Jobfile jf = (Jobfile)getdata(node); -+ if (jf->is_fd) { -+ LinkNode next = nextnode(node); -+ zclose(jf->u.fd); -+ (void)remnode(filelist, node); -+ zfree(jf, sizeof(*jf)); -+ node = next; -+ } else -+ incnode(node); -+ } -+} -+ - /* Finished with list of files for a job */ - - /**/ -@@ -1415,19 +1439,7 @@ zwaitjob(int job, int wait_cmd) - * we can't deadlock on the fact that those still exist, so - * that's not a problem. - */ -- LinkNode node = firstnode(jn->filelist); -- while (node) { -- Jobfile jf = (Jobfile)getdata(node); -- if (jf->is_fd) { -- LinkNode next = nextnode(node); -- (void)remnode(jn->filelist, node); -- zclose(jf->u.fd); -- zfree(jf, sizeof(*jf)); -- node = next; -- } else { -- incnode(node); -- } -- } -+ pipecleanfilelist(jn->filelist); - } - while (!errflag && jn->stat && - !(jn->stat & STAT_DONE) && -diff --git a/Test/A05execution.ztst b/Test/A05execution.ztst -index 61d24fe..6abfd8b 100644 ---- a/Test/A05execution.ztst -+++ b/Test/A05execution.ztst -@@ -207,10 +207,12 @@ F:This similar test was triggering a reproducible failure with pipestatus. - coproc { read -Et 5 || kill -INT $$ } - print -u $ZTST_fd 'This test takes 5 seconds to fail...' - { printf "%d\n" {1..20000} } | ( read -E ) -+ hang(){ printf "%d\n" {2..20000} | cat }; hang | ( read -E ) - print -p done - read -Ep - 0:Bug regression: piping a shell construct to an external process may hang - >1 -+>2 - >done - F:This test checks for a file descriptor leak that could cause the left - F:side of a pipe to block on write after the right side has exited diff --git a/zsh.changes b/zsh.changes index 09997fc..f5f3d55 100644 --- a/zsh.changes +++ b/zsh.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Jan 7 08:40:21 UTC 2014 - idonmez@suse.com + +- Update to version 5.0.5 + * Fixes a couple of regression in 5.0.4 +- Remove zsh-pipefix.patch, merged upstream + ------------------------------------------------------------------- Wed Dec 25 12:25:03 UTC 2013 - idonmez@suse.com diff --git a/zsh.spec b/zsh.spec index 4c947e8..9d1dac3 100644 --- a/zsh.spec +++ b/zsh.spec @@ -1,7 +1,7 @@ # # spec file for package zsh # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: zsh -Version: 5.0.4 +Version: 5.0.5 Release: 0 Summary: Shell with comprehensive completion License: MIT @@ -37,7 +37,6 @@ Source16: dotzshrc.rh Source17: zshprompt.pl %endif Patch1: trim-unneeded-completions.patch -Patch2: zsh-pipefix.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?suse_version} Requires(pre): %{install_info_prereq} @@ -96,7 +95,6 @@ This package contains the Zsh manual in html format. %if 0%{?suse_version} %patch1 -p1 %endif -%patch2 -p1 # Remove executable bit chmod 0644 Etc/changelog2html.pl