]> err.no Git - util-linux/commit
script: fix race conditions
authorKarel Zak <kzak@redhat.com>
Mon, 6 Aug 2007 22:36:31 +0000 (00:36 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 6 Aug 2007 22:36:31 +0000 (00:36 +0200)
commit1f58c445c6805c1a611a7eb1cde0ced633c40b6f
tree0daf55d335a6b5d24aa7841ac7a6951c943286ff
parenta512390d9296ac5183cde1c2ca9e5fd9158ccf5e
script: fix race conditions

script(1) uses three processes (doinput, dooutput and doshell).  It's
possible that the shell process is finished before the input and
output processes are completely initialized. For example:

  $ script -c "printf Bingo"

In particular case the output and input processes read/write data from
shell process in time when the shell process is already done -- so it
hangs on read().

The second problem is that the output process can finish although
there are unread data from finished shell process -- an output in
the typescript file and on terminal is incomplete!

script(1) has to pass:

 $ for i in `seq 1 1000`; do script -q -c "printf 'Bingo\n'"; done | grep -c Bingo
 1000

without problems.

Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/script.c