pause(); 
sigsuspend(&sigs); 
static int winch_thread(void *arg){	struct winch_data *data = arg;	sigset_t sigs;	int pty_fd, pipe_fd;	int count, err;	char c = 1;	os_close_file(data->close_me);	pty_fd = data->pty_fd;	pipe_fd = data->pipe_fd;	count = os_write_file(pipe_fd, &c, sizeof(c));	if(count != sizeof(c))		printk("winch_thread : failed to write synchronization "		       "byte, err = %d\n", -count);	/* We are not using SIG_IGN on purpose, so don't fix it as I thought to	 * do! If using SIG_IGN, the pause() call below would not stop on	 * SIGWINCH. */	signal(SIGWINCH, winch_handler);	sigfillset(&sigs);	sigdelset(&sigs, SIGWINCH);	/* Block anything else than SIGWINCH. */	if(sigprocmask(SIG_SETMASK, &sigs, NULL) < 0){		printk("winch_thread : sigprocmask failed, errno = %d\n", 		       errno);		exit(1);	}	if(setsid() < 0){		printk("winch_thread : setsid failed, errno = %d\n", errno);		exit(1);	}	err = os_new_tty_pgrp(pty_fd, os_getpid());	if(err < 0){		printk("winch_thread : new_tty_pgrp failed, err = %d\n", -err);		exit(1);	}	/* These are synchronization calls between various UML threads on the	 * host - since they are not different kernel threads, we cannot use	 * kernel semaphores. We don't use SysV semaphores because they are	 * persistant. */	count = os_read_file(pipe_fd, &c, sizeof(c));	if(count != sizeof(c))		printk("winch_thread : failed to read synchronization byte, "		       "err = %d\n", -count);	while(1){		/* This will be interrupted by SIGWINCH only, since other signals		 * are blocked.*/		pause();		count = os_write_file(pipe_fd, &c, sizeof(c));		if(count != sizeof(c))			printk("winch_thread : write failed, err = %d\n",			       -count);	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ed1b58d8b53519e10a35c6a2bb49cac35f439621/chan_user.c/buggy/arch/um/drivers/chan_user.c