linux-um archives
 help / color / mirror / Atom feed
From: Bodo Stroesser <bstroesser@fujitsu-siemens.com>
To: blaisorblade@yahoo.it
Cc: jdike@addtoit.com, user-mode-linux-devel@lists.sourceforge.net
Subject: Re: [uml-devel] [patch 1/1] uml: replace pause with sigsuspend
Date: Tue, 17 May 2005 12:14:17 +0200	[thread overview]
Message-ID: <4289C3F9.9020105@fujitsu-siemens.com> (raw)
In-Reply-To: <20050516180143.95BDB1993E0@zion.home.lan>

I didn't have the time to test the patch, but I guess, it won't work.

Maybe, the man pages for sigsuspend are somewhat missleading, saying:

        The sigsuspend call temporarily replaces the signal mask for
        the process with that given by mask and then suspends the
        process until a signal is received.

Reading the code of sys_sigsuspend() in arch/i386/kernel/signal.c,
you'll find that it will return to user only, if do_signal() returns 1.
This will happen, if there was a signal to deliver. Ignored signals
will not be delivered, so sys_sigsupend will not return on SIGWINCH,
if SIGWINCH handler is set to SIG_IGN.

So, for UML's winch_handler, there is no difference between pause()
and sigsuspend(), because sigsuspend's feature of accepting a sigmask
for use while waiting, in fact isn't needed here as the same mask is
set already before with sigprocmask().

	Bodo

blaisorblade@yahoo.it wrote:
> Replace pause with sigsuspend, to avoid needing to set an empty handler for SIGWINCH.
> 
> Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
> ---
> 
>  linux-2.6.git-paolo/arch/um/drivers/chan_user.c |   15 ++++-----------
>  1 files changed, 4 insertions(+), 11 deletions(-)
> 
> diff -puN arch/um/drivers/chan_user.c~uml-replace-pause-with-sigsuspend arch/um/drivers/chan_user.c
> --- linux-2.6.git/arch/um/drivers/chan_user.c~uml-replace-pause-with-sigsuspend	2005-05-16 08:07:30.000000000 +0200
> +++ linux-2.6.git-paolo/arch/um/drivers/chan_user.c	2005-05-16 08:08:10.000000000 +0200
> @@ -67,10 +67,6 @@ error:
>   * it (see below for how we make sure to exit only on SIGWINCH).
>   */
>  
> -static void winch_handler(int sig)
> -{
> -}
> -
>  struct winch_data {
>  	int pty_fd;
>  	int pipe_fd;
> @@ -93,14 +89,11 @@ static int winch_thread(void *arg)
>  		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. */
> +	/* Block anything else than SIGWINCH. XXX: Actually, this may be removed
> +	 * maybe, due to sigsuspend below, which replaces the signal mask, but
> +	 * let's keep it.*/
>  	if(sigprocmask(SIG_SETMASK, &sigs, NULL) < 0){
>  		printk("winch_thread : sigprocmask failed, errno = %d\n", 
>  		       errno);
> @@ -130,7 +123,7 @@ static int winch_thread(void *arg)
>  	while(1){
>  		/* This will be interrupted by SIGWINCH only, since other signals
>  		 * are blocked.*/
> -		pause();
> +		sigsuspend(&sigs);
>  
>  		count = os_write_file(pipe_fd, &c, sizeof(c));
>  		if(count != sizeof(c))
> _
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by Oracle Space Sweepstakes
> Want to be the first software developer in space?
> Enter now for the Oracle Space Sweepstakes!
> http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
> _______________________________________________
> User-mode-linux-devel mailing list
> User-mode-linux-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

  reply	other threads:[~2005-05-17 10:14 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-16 18:01 [uml-devel] [patch 1/1] uml: replace pause with sigsuspend blaisorblade
2005-05-17 10:14 ` Bodo Stroesser [this message]
2005-05-18 15:18   ` Blaisorblade
2005-05-18 19:19     ` Bodo Stroesser
2005-05-19 13:35       ` Blaisorblade
2005-05-19 13:39         ` Bodo Stroesser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4289C3F9.9020105@fujitsu-siemens.com \
    --to=bstroesser@fujitsu-siemens.com \
    --cc=blaisorblade@yahoo.it \
    --cc=jdike@addtoit.com \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox