>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