Files
bash/jobs.c.patch
T
2011-12-07 09:25:49 -05:00

57 lines
1.6 KiB
Diff

*** jobs.c.20080704 2008-07-10 15:14:13.000000000 -0400
--- jobs.c 2008-07-10 15:17:59.000000000 -0400
***************
*** 266,269 ****
--- 266,270 ----
static void set_job_running __P((int));
static void setjstatus __P((int));
+ static int maybe_give_terminal_to __P((pid_t, pid_t, int));
static void mark_all_jobs_as_dead __P((void));
static void mark_dead_jobs_as_notified __P((int));
***************
*** 637,641 ****
*/
if (job_control && newjob->pgrp && (subshell_environment&SUBSHELL_ASYNC) == 0)
! give_terminal_to (newjob->pgrp, 0);
}
}
--- 638,642 ----
*/
if (job_control && newjob->pgrp && (subshell_environment&SUBSHELL_ASYNC) == 0)
! maybe_give_terminal_to (shell_pgrp, newjob->pgrp, 0);
}
}
***************
*** 3833,3836 ****
--- 3834,3863 ----
}
+ /* Give terminal to NPGRP iff it's currently owned by OPGRP. FLAGS are the
+ flags to pass to give_terminal_to(). */
+ static int
+ maybe_give_terminal_to (opgrp, npgrp, flags)
+ pid_t opgrp, npgrp;
+ int flags;
+ {
+ int tpgrp;
+
+ tpgrp = tcgetpgrp (shell_tty);
+ if (tpgrp == npgrp)
+ {
+ terminal_pgrp = npgrp;
+ return 0;
+ }
+ else if (tpgrp != opgrp)
+ {
+ #if defined (DEBUG)
+ internal_warning ("maybe_give_terminal_to: terminal pgrp == %d shell pgrp = %d", tpgrp, opgrp);
+ #endif
+ return -1;
+ }
+ else
+ return (give_terminal_to (npgrp, flags));
+ }
+
/* Clear out any jobs in the job array. This is intended to be used by
children of the shell, who should not have any job structures as baggage