>From: James Legg <jl...@feralinteractive.com>
>Sent: Tuesday, July 25, 2017 6:24 AM
>To: mesa-dev@lists.freedesktop.org; Charmaine Lee
>Subject: Re: [Mesa-dev] [PATCH] st/mesa: create framebuffer iface hash table 
>per st manager

>On Sun, 2017-07-23 at 16:37 -0700, Charmaine Lee wrote:
>> With this patch, framebuffer interface hash table is created
>> per state tracker manager.
>>
>> Fixes crash with steam.
>>
>> Bugzilla: 
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.freedesktop.org_show-5Fbug.cgi-3Fid->3D101876&d=DwICaQ&c=uilaK90D4TOVoH58JNXRgQ&r=Ang1qmMo4GwCmRUnLE-f31kqPa6AOnoS->OAMUzQyM0M&m=2ysMQPCeR_vf9ch72ej4wehfJ99Mtt9hBTroMbybY_o&s=xmTbTiDE9mV_SwkzVM08KH23S6vuWlerjRkqriB3>QOg&e=
>> Fixes: 5124bf98239 ("st/mesa: add destroy_drawable interface")
>> Tested-by: Christoph Haag <haa...@frickel.club>

>> --- a/src/mesa/state_tracker/st_manager.c
>>
>> @@ -511,45 +515,63 @@ st_framebuffer_iface_equal(const void *a, const void 
>> *b)
>>
>>
>>  static boolean
>> -st_framebuffer_iface_lookup(const struct st_framebuffer_iface *stfbi)
>> +st_framebuffer_iface_lookup(struct st_manager *smapi,
>> +                            const struct st_framebuffer_iface *stfbi)
>>  {
>> +   struct st_manager_private *smPriv =
>> +      (struct st_manager_private *)smapi->st_manager_private;
>>     struct hash_entry *entry;
>>
>> -   mtx_lock(&st_mutex);
>> -   entry = _mesa_hash_table_search(st_fbi_ht, stfbi);
>> -   mtx_unlock(&st_mutex);
>> +   assert(smPriv);
>> +   assert(smPriv->stfbi_ht);
>> +
>> +   mtx_lock(&smPriv->st_mutex);
>> +   entry = _mesa_hash_table_search(smPriv->stfbi_ht, stfbi);
>> +   mtx_unlock(&smPriv->st_mutex);
>>
>>     return entry != NULL;
>>  }
>>
>>
>>  static boolean
>> -st_framebuffer_iface_insert(struct st_framebuffer_iface *stfbi)
>> +st_framebuffer_iface_insert(struct st_manager *smapi,
>> +                            struct st_framebuffer_iface *stfbi)
>>  {
>> +   struct st_manager_private *smPriv =
>> +      (struct st_manager_private *)smapi->st_manager_private;
>>     struct hash_entry *entry;
>>
>> -   mtx_lock(&st_mutex);
>> -   entry = _mesa_hash_table_insert(st_fbi_ht, stfbi, stfbi);
>> -   mtx_unlock(&st_mutex);
>> +   assert(smPriv);
>> +   assert(smPriv->stfbi_ht);
>> +
>> +   mtx_lock(&smPriv->st_mutex);
>> +   entry = _mesa_hash_table_insert(smPriv->stfbi_ht, stfbi, stfbi);
>> +   mtx_unlock(&smPriv->st_mutex);
>>
>>     return entry != NULL;
>>  }
>>
>>
>>  static void
>> -st_framebuffer_iface_remove(struct st_framebuffer_iface *stfbi)
>> +st_framebuffer_iface_remove(struct st_manager *smapi,
>> +                            struct st_framebuffer_iface *stfbi)
>>  {
>> +   struct st_manager_private *smPriv =
>> +      (struct st_manager_private *)smapi->st_manager_private;
>>     struct hash_entry *entry;
>>
>> -   mtx_lock(&st_mutex);
>> -   entry = _mesa_hash_table_search(st_fbi_ht, stfbi);
>> +   if (!smPriv || !smPriv->stfbi_ht);
>> +      return;

>The semicolon after the if causes the return to execute
>unconditionally.

Ah, good catch.  Thanks.  Will fix it.

-Charmaine
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to