mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
31672: Add test that was failing and fix zpty set-up race
This commit is contained in:
parent
f61804c4b4
commit
b0a0441902
3 changed files with 42 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-08-26 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||
|
||||
* 31672: Src/Modules/zpty.c, Test/V08zpty.ztst: add test that
|
||||
was failing and fix race when setting up pty.
|
||||
|
||||
2013-08-25 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||
|
||||
* 31665: Src/Modules/zpty.c, Test/V08zpty.ztst, Test/.distfiles:
|
||||
|
|
|
@ -293,8 +293,8 @@ static int
|
|||
newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
|
||||
{
|
||||
Ptycmd p;
|
||||
int master, slave, pid, oineval = ineval;
|
||||
char *oscriptname = scriptname;
|
||||
int master, slave, pid, oineval = ineval, ret;
|
||||
char *oscriptname = scriptname, syncch;
|
||||
Eprog prog;
|
||||
|
||||
/* code borrowed from bin_eval() */
|
||||
|
@ -398,6 +398,20 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
|
|||
setsparam("TTY", ztrdup(ttystrname));
|
||||
|
||||
opts[INTERACTIVE] = 0;
|
||||
|
||||
syncch = 0;
|
||||
do {
|
||||
ret = write(1, &syncch, 1);
|
||||
} while (ret != 1 && (
|
||||
#ifdef EWOULDBLOCK
|
||||
errno == EWOULDBLOCK ||
|
||||
#else
|
||||
#ifdef EAGAIN
|
||||
errno == EAGAIN ||
|
||||
#endif
|
||||
#endif
|
||||
errno == EINTR));
|
||||
|
||||
execode(prog, 1, 0, "zpty");
|
||||
stopmsg = 2;
|
||||
mypid = 0; /* trick to ensure we _exit() */
|
||||
|
@ -433,6 +447,18 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
|
|||
scriptname = oscriptname;
|
||||
ineval = oineval;
|
||||
|
||||
do {
|
||||
ret = read(master, &syncch, 1);
|
||||
} while (ret != 1 && (
|
||||
#ifdef EWOULDBLOCK
|
||||
errno == EWOULDBLOCK ||
|
||||
#else
|
||||
#ifdef EAGAIN
|
||||
errno == EAGAIN ||
|
||||
#endif
|
||||
#endif
|
||||
errno == EINTR));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,10 +11,18 @@
|
|||
|
||||
%test
|
||||
|
||||
zpty cat cat
|
||||
zpty -w cat a line of text
|
||||
var=
|
||||
zpty -r cat var && print -r -- ${var%%$'\r\n'}
|
||||
zpty -d cat
|
||||
0:zpty with a process that does not set up the terminal: internal write
|
||||
>a line of text
|
||||
|
||||
zpty cat cat
|
||||
print a line of text | zpty -w cat
|
||||
var=
|
||||
zpty -r cat var && print -r -- ${var%%$'\r\n'}
|
||||
zpty -d cat
|
||||
0:zpty with a process that does not set up the terminal
|
||||
0:zpty with a process that does not set up the terminal: write via stdin
|
||||
>a line of text
|
||||
|
|
Loading…
Reference in a new issue