Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
zsh-3.0.3: another problem in Src/jobs.c
- X-seq: zsh-workers 3257
- From: suzuki@xxxxxxxxxxxxxx (SUZUKI Hisao)
- To: zsh-workers@xxxxxxxxxxxxxxx
- Subject: zsh-3.0.3: another problem in Src/jobs.c
- Date: Thu, 19 Jun 97 15:24:32 JST
- Organization: Oki Technosystems Laboratory, Inc., Nagoya, Japan
Jo napot kivanok!
(...or "Jo reggelt kivanok")
I reported a problem of zsh-3.0.3/Src/jobs.c by e-mail
<9706180710.AA10798@xxxxxxxxxxxxxxxxxxxxxxxxx> yesterday. Now I
found another problem. It is like this:
ares:~% stty
speed 9600 baud; line = 0;
intr = ^G; erase = ^H;
-brkint ixoff -imaxbel
-iexten -echoctl
ares:~% emacs -nw &
[1] 2537
ares:~%
[1] + suspended (tty output) emacs -nw
ares:~% fg
[1] + continued emacs -nw
zsh: suspended emacs -nw
ares:~% stty
speed 9600 baud; line = 0;
intr = ^G; quit = <undef>; erase = ^H; susp = <undef>; lnext = <undef>;
flush = <undef>;
-brkint inlcr ixoff -imaxbel
-iexten -echoctl
This is similar to what I reported yesterday in that the tty
setting is modified unexpectedly by a background job. Really
they are the same _annoying_ problem of the same cause in a
sense.
Again, for the time being, I made a hack to fix it
rather in a clean way (at least I think so :-) this time. I
hope the problem will be fixed soon in any way.
----------------------------------------------------------------
*** zsh-3.0.3/Src/jobs.c.ORIG Tue Jun 3 05:11:27 1997
--- zsh-3.0.3/Src/jobs.c Thu Jun 19 02:35:37 1997
***************
*** 121,135 ****
int job;
int val = 0, status = 0;
int somestopped = 0, inforeground = 0;
for (pn = jn->procs; pn; pn = pn->next) {
if (pn->status == SP_RUNNING) /* some processes in this job are running */
return; /* so no need to update job table entry */
if (WIFSTOPPED(pn->status)) /* some processes are stopped */
somestopped = 1; /* so job is not done, but entry needs updating */
! if (!pn->next) /* last job in pipeline determines exit status */
val = (WIFSIGNALED(pn->status)) ? 0200 | WTERMSIG(pn->status) :
WEXITSTATUS(pn->status);
if (pn->pid == jn->gleader) /* if this process is process group leader */
status = pn->status;
}
--- 121,140 ----
int job;
int val = 0, status = 0;
int somestopped = 0, inforeground = 0;
+ pid_t pgrp = -1;
+ int is_foreground = 0; /* is this job in the foreground actually? */
+ int is_stopped = 0; /* is this job stopped? */
for (pn = jn->procs; pn; pn = pn->next) {
if (pn->status == SP_RUNNING) /* some processes in this job are running */
return; /* so no need to update job table entry */
if (WIFSTOPPED(pn->status)) /* some processes are stopped */
somestopped = 1; /* so job is not done, but entry needs updating */
! if (!pn->next) { /* last job in pipeline determines exit status */
val = (WIFSIGNALED(pn->status)) ? 0200 | WTERMSIG(pn->status) :
WEXITSTATUS(pn->status);
+ is_stopped = WIFSTOPPED(pn->status);
+ }
if (pn->pid == jn->gleader) /* if this process is process group leader */
status = pn->status;
}
***************
*** 154,168 ****
}
}
! if (shout && !ttyfrozen && !jn->stty_in_env)
! gettyinfo(&shttyinfo);
!
if (isset(MONITOR)) {
! pid_t pgrp = gettygrp(); /* get process group of tty */
!
/* is this job in the foreground of an interactive shell? */
! if (mypgrp != pgrp && inforeground &&
! (jn->gleader == pgrp || (pgrp > 1 && kill(-pgrp, 0) == -1))) {
attachtty(mypgrp);
adjustwinsize(); /* check window size and adjust if necessary */
}
--- 159,179 ----
}
}
! if (shout && !ttyfrozen && !jn->stty_in_env && !is_stopped) {
! pgrp = gettygrp(); /* get process group of tty */
! is_foreground = (jn->gleader == pgrp ||
! (pgrp > 1 && kill(-pgrp, 0) == -1));
! if (is_foreground)
! gettyinfo(&shttyinfo);
! }
if (isset(MONITOR)) {
! if (pgrp == -1) {
! pgrp = gettygrp();
! is_foreground = (jn->gleader == pgrp ||
! (pgrp > 1 && kill(-pgrp, 0) == -1));
! }
/* is this job in the foreground of an interactive shell? */
! if (mypgrp != pgrp && inforeground && is_foreground) {
attachtty(mypgrp);
adjustwinsize(); /* check window size and adjust if necessary */
}
----------------------------------------------------------------
Regards,
Hisao Suzuki <suzuki@xxxxxxxxxxxxxx>
Messages sorted by:
Reverse Date,
Date,
Thread,
Author