diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-04-07 21:46:44 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-04-07 21:46:44 +0300 |
commit | 658ede8ca657fe56c7ea6b0a3a1bd89fb858d26d (patch) | |
tree | 928465fc4f72e2467451cf774d8dd96fdb958927 /builtin.c | |
parent | 82dec6932ed868d9466d23ac5956e09594707dd2 (diff) | |
download | egawk-658ede8ca657fe56c7ea6b0a3a1bd89fb858d26d.tar.gz egawk-658ede8ca657fe56c7ea6b0a3a1bd89fb858d26d.tar.bz2 egawk-658ede8ca657fe56c7ea6b0a3a1bd89fb858d26d.zip |
Fix race condition in fatal errors for one end closed on two way pipe.
Diffstat (limited to 'builtin.c')
-rw-r--r-- | builtin.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -1669,6 +1669,7 @@ do_printf(int nargs, int redirtype) rp = redirect(redir_exp, redirtype, & errflg); if (rp != NULL) { if ((rp->flag & RED_TWOWAY) != 0 && rp->output.fp == NULL) { + (void) close_rp(rp, CLOSE_ALL); fatal(_("printf: attempt to write to closed write end of two-way pipe")); } fp = rp->output.fp; @@ -2149,6 +2150,7 @@ do_print(int nargs, int redirtype) rp = redirect(redir_exp, redirtype, & errflg); if (rp != NULL) { if ((rp->flag & RED_TWOWAY) != 0 && rp->output.fp == NULL) { + (void) close_rp(rp, CLOSE_ALL); fatal(_("print: attempt to write to closed write end of two-way pipe")); } fp = rp->output.fp; @@ -2217,6 +2219,7 @@ do_print_rec(int nargs, int redirtype) rp = redirect(redir_exp, redirtype, & errflg); if (rp != NULL) { if ((rp->flag & RED_TWOWAY) != 0 && rp->output.fp == NULL) { + (void) close_rp(rp, CLOSE_ALL); fatal(_("print: attempt to write to closed write end of two-way pipe")); } fp = rp->output.fp; |