Re: [PATCH] deadlock in script

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 30, 2014 at 03:30:45PM +0900, Csaba Kos wrote:
> diff --git a/term-utils/script.c b/term-utils/script.c
> index e5d239c..32906d0 100644
> --- a/term-utils/script.c
> +++ b/term-utils/script.c
> @@ -36,6 +36,9 @@
>   * - added Native Language Support
>   *
>   * 2000-07-30 Per Andreas Buer <per@xxxxxxxxx> - added "q"-option
> + *
> + * 2014-05-30 Csaba Kos <csaba.kos@xxxxxxxxx>
> + * - fixed a rare deadlock after child termination
>   */
>  
>  /*
> @@ -114,6 +117,8 @@ int	tflg = 0;
>  int	forceflg = 0;
>  int	isterm;
>  
> +sigset_t block_mask, unblock_mask;

 This declaration shadows declaration in main() where is also block_mask and 
 unblock_mask -- I guess it's not expected.

> +	/* block SIGCHLD */
> +	sigprocmask(SIG_SETMASK, &block_mask, &unblock_mask);

 the initialization is where? in main()?

> +		/* wait for input or signal (including SIGCHLD) */
> +		if ((cc = pselect(STDIN_FILENO + 1, &readfds, NULL, NULL, NULL,
> +			&unblock_mask)) > 0) {

 probably good idea, I have thought about something like this (or
 signalfd()), but I have never found time to try it... thanks!

> +			if ((cc = read(STDIN_FILENO, ibuf, BUFSIZ)) > 0) {
> +				if (write_all(master, ibuf, cc)) {
> +					warn (_("write failed"));
> +					fail();
> +				}

  Karel  


-- 
 Karel Zak  <kzak@xxxxxxxxxx>
 http://karelzak.blogspot.com
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux