[PATCH libdrm] add libsync.h helper

Chris Wilson chris at chris-wilson.co.uk
Mon Oct 31 14:38:14 UTC 2016


On Mon, Oct 31, 2016 at 10:30:23AM -0400, Rob Clark wrote:
> On Mon, Oct 31, 2016 at 9:55 AM, Chris Wilson <chris at chris-wilson.co.uk> wrote:
> > What I liked was doing
> >
> > if (fd2 < 0)
> >         return dup(fd1);
> >
> > if (fd1 < 0)
> >         return dup(fd2);
> >
> > That makes accumulating the fences in the caller much easier (i.e. they
> > start with
> >         batch.fence_in = -1;
> > then
> >         batch.fence_in = sync_merge(batch.fence_in, fence);
> 
> note that if you don't want to leak fd's you'd have to do something more like:
> 
>   int new_fence = sync_merge(batch->fence_in, fence);
>   if (batch->fence_in != -1)
>      close(batch->fence_in);
>   batch->fence_in = new_fence;

Hmm. so I thought the ioctl was closing the input.
 
> so it isn't *that* much better..  I guess you could do the close()
> unconditionally and ignore the error if batch->fence_in==-1..

Yup, realised after writing that a bit more on the input side is
required.


if (fd2 < 0)
	return fd1;

if (fd1 < 0)
	return dup(fd2);

ret = ioctl();
if (ret < 0)
	return fd1;

close(fd1);
return result.fence;

Which discards the synchronisation on the new fence if there's an error,
are we meant to flag a GL_ERROR?
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the dri-devel mailing list