[Mesa-dev] [PATCH] mesa: framebuffer refcounting with atomic ops
Tapani Pälli
tapani.palli at intel.com
Tue Aug 15 14:23:11 UTC 2017
On 08/15/2017 05:14 PM, Timothy Arceri wrote:
> We seem to revisit this every few months. Please search your email for
> all the details but the short answer is this makes some race
> conditions worse. You will need to address and follow the previous
> suggestions to be able to improve locking here.
>
ok will take a look,
Thanks;
> On 15/08/17 23:04, Marek Olšák wrote:
>> Reviewed-by: Marek Olšák <marek.olsak at amd.com>
>>
>> Marek
>>
>> On Tue, Aug 15, 2017 at 2:03 PM, Tapani Pälli
>> <tapani.palli at intel.com> wrote:
>>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>>> ---
>>> src/mesa/main/framebuffer.c | 19 +++++--------------
>>> 1 file changed, 5 insertions(+), 14 deletions(-)
>>>
>>> Use atomic ops in same manner as for shader objects, IMO makes
>>> code easier to read.
>>>
>>> diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
>>> index 039762a074..69e28c8af7 100644
>>> --- a/src/mesa/main/framebuffer.c
>>> +++ b/src/mesa/main/framebuffer.c
>>> @@ -45,7 +45,7 @@
>>> #include "texobj.h"
>>> #include "glformats.h"
>>> #include "state.h"
>>> -
>>> +#include "util/u_atomic.h"
>>>
>>>
>>> /**
>>> @@ -243,25 +243,16 @@ _mesa_reference_framebuffer_(struct
>>> gl_framebuffer **ptr,
>>> {
>>> if (*ptr) {
>>> /* unreference old renderbuffer */
>>> - GLboolean deleteFlag = GL_FALSE;
>>> struct gl_framebuffer *oldFb = *ptr;
>>> -
>>> - mtx_lock(&oldFb->Mutex);
>>> - assert(oldFb->RefCount > 0);
>>> - oldFb->RefCount--;
>>> - deleteFlag = (oldFb->RefCount == 0);
>>> - mtx_unlock(&oldFb->Mutex);
>>> -
>>> - if (deleteFlag)
>>> - oldFb->Delete(oldFb);
>>> + assert(p_atomic_read(&oldFb->RefCount) > 0);
>>> + if (p_atomic_dec_zero(&oldFb->RefCount))
>>> + oldFb->Delete(oldFb);
>>>
>>> *ptr = NULL;
>>> }
>>>
>>> if (fb) {
>>> - mtx_lock(&fb->Mutex);
>>> - fb->RefCount++;
>>> - mtx_unlock(&fb->Mutex);
>>> + p_atomic_inc(&fb->RefCount);
>>> *ptr = fb;
>>> }
>>> }
>>> --
>>> 2.13.5
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
More information about the mesa-dev
mailing list