Re: [RFC v2 2/3] dma-buf/fence-array: add fence_array_teardown()

From: Gustavo Padovan
Date: Tue Jun 28 2016 - 10:17:16 EST


2016-06-28 Christian König <christian.koenig@xxxxxxx>:

> Am 27.06.2016 um 21:29 schrieb Gustavo Padovan:
> > From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx>
> >
> > As the array of fence callbacks held by an active struct fence_array
> > each has a reference to the struct fence_array, when the owner of the
> > fence_array is freed it must dispose of the callback references before
> > it can free the fence_array. This can not happen simply during
> > fence_release() because of the extra references and so we need a new
> > function to run before the final fence_put().
>
> As I said previously as well, this is completely superfluous.
>
> The fence array keeps a reference to itself as long as not all callbacks are
> signaled.
>
> So you only need to unregister your callback from the array itself and drop
> your reference when you don't need it any more in the sync file.

Exactly, this should be called from sync_file_free() because of the
following use case:

1. You create 2 sync_file with 1 fence each
2. Merge both fences, which creates a fence array
3. Close the sync_file fd without waiting for the fences to
signal

At this point you leak the fence-array because the final fence_put()
does not release it because of the extra references from the non
signalled fences so we need to clean up this somehow.

Gustavo