2016-06-28 Christian König <christian.koenig@xxxxxxx>:
Am 27.06.2016 um 21:29 schrieb Gustavo Padovan:Exactly, this should be called from sync_file_free() because of the
From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx>As I said previously as well, this is completely superfluous.
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().
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.
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