[Intel-gfx] [PATCH i-g-t] overlay/intel-gpu-overlay

Vlad, Marius C marius.c.vlad at intel.com
Wed Nov 18 05:51:57 PST 2015



-----Original Message-----
From: Chris Wilson [mailto:chris at chris-wilson.co.uk] 
Sent: Wednesday, November 18, 2015 2:59 PM
To: Vlad, Marius C <marius.c.vlad at intel.com>
Cc: intel-gfx at lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH i-g-t] overlay/intel-gpu-overlay

On Wed, Nov 18, 2015 at 02:40:29PM +0200, marius.c.vlad at intel.com wrote:
> From: Marius Vlad <marius.c.vlad at intel.com>
> 
> Use sigaction() instead of signal() and add SIGINT, SIGTERM to close 
> the overlay window. With this change the overlay window will be 
> destroyed.
> 
> Signed-off-by: Marius Vlad <marius.c.vlad at intel.com>
> ---
>  overlay/overlay.c | 42 ++++++++++++++++++++++++++++++++++++------
>  1 file changed, 36 insertions(+), 6 deletions(-)
> 
> diff --git a/overlay/overlay.c b/overlay/overlay.c index 
> 3c0dbb4..48ba67c 100644
> --- a/overlay/overlay.c
> +++ b/overlay/overlay.c
> @@ -804,11 +804,19 @@ static void show_gem_objects(struct 
> overlay_context *ctx, struct overlay_gem_obj
>  
>  static int take_snapshot;
>  
> -static void signal_snapshot(int sig)
> +static void
> +signal_snapshot(int sig, siginfo_t *si, void *__unused)
>  {
>  	take_snapshot = sig;
>  }
>  
> +static void
> +signal_x11_destroy(int sig, siginfo_t *si, void *__unused) {
> +	x11_overlay_stop();

is not signalsafe.

Indeed. Any ideas then? I'm hitting a weird system hang if the overlay window is open
for a period of time (although period ranges to minutes it seems to happen each time). If the window
is closed and process exits I don't see this behavior. This is entirely different bug but meanwhile 
wanted to keep my machine running.

> +	if (ctx.surface == NULL) {
> +		fprintf(stderr, "Failed to create X11 overlay.\n");

Spurious changes.

Right, just debugging. 

>  		ctx.surface = x11_window_create(&config, &ctx.width, &ctx.height);
> -	if (ctx.surface == NULL)
> +	}
> +	if (ctx.surface == NULL) {
> +		fprintf(stderr, "Failed to create X11 window.\n");
>  		ctx.surface = kms_overlay_create(&config, &ctx.width, &ctx.height);
> -	if (ctx.surface == NULL)
> +	}
> +	if (ctx.surface == NULL) {
> +		fprintf(stderr, "Failed to create KMS overlay.\n");
>  		return ENXIO;
> +	}
>  
>  	if (daemonize && daemon(0, 0))
>  		return EINVAL;
> @@ -913,7 +930,20 @@ int main(int argc, char **argv)
>  	if (renice && (nice(renice) == -1))
>  		fprintf(stderr, "Could not renice: %s\n", strerror(errno));
>  
> -	signal(SIGUSR1, signal_snapshot);
> +	sa.sa_flags = SA_SIGINFO;
> +	sigemptyset(&sa.sa_mask);
> +	sa.sa_sigaction = &signal_snapshot;
> +
> +	if (sigaction(SIGUSR1, &sa, NULL) == -1) {

Any particular reason for a fondness here for sigaction?

Well signal(2) states to avoid it and instead use sigaction(). I'm not that fond of it :)

-Chris

--
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list