[Mesa-dev] [PATCH] mesa: framebuffer refcounting with atomic ops

Timothy Arceri tarceri at itsqueeze.com
Tue Aug 15 14:14:23 UTC 2017


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.

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