----- Original Message -----
> On Fri, Jan 27, 2012 at 07:28, Jose Fonseca <jfons...@vmware.com>
> wrote:
> >
> >
> > ----- Original Message -----
> >> On Fri, Jan 27, 2012 at 8:18 AM, Brian Paul
> >> <brian.e.p...@gmail.com>
> >> wrote:
> >> > On Fri, Jan 27, 2012 at 7:40 AM,  <jfons...@vmware.com> wrote:
> >> >> From: José Fonseca <jfons...@vmware.com>
> >> >>
> >> >> Should avoid dangling pointer derreference with
> >> >>
> >> >>  glean --run results --overwrite --quick --tests texSwizzle
> >> >> ---
> >> >>  src/gallium/auxiliary/draw/draw_llvm.c |    5 +++++
> >> >>  1 files changed, 5 insertions(+), 0 deletions(-)
> >> >>
> >> >> diff --git a/src/gallium/auxiliary/draw/draw_llvm.c
> >> >> b/src/gallium/auxiliary/draw/draw_llvm.c
> >> >> index e71c802..b81c725 100644
> >> >> --- a/src/gallium/auxiliary/draw/draw_llvm.c
> >> >> +++ b/src/gallium/auxiliary/draw/draw_llvm.c
> >> >> @@ -65,8 +65,13 @@ static void
> >> >>  draw_llvm_garbage_collect_callback(void *cb_data)
> >> >>  {
> >> >>    struct draw_llvm *llvm = (struct draw_llvm *) cb_data;
> >> >> +   struct draw_context *draw = llvm->draw;
> >> >>    struct draw_llvm_variant_list_item *li;
> >> >>
> >> >> +   /* Ensure prepare will be run and shaders recompiled */
> >> >> +   assert(!draw->suspend_flushing);
> >> >> +   draw_do_flush(draw, DRAW_FLUSH_STATE_CHANGE);
> >> >> +
> >> >>    /* free all shader variants */
> >> >>    li = first_elem(&llvm->vs_variants_list);
> >> >>    while (!at_end(&llvm->vs_variants_list, li)) {
> >> >
> >> > Looks good to me.
> >
> > Thanks.
> >
> >> Should probably be tagged for the 8.0 branch too.
> >
> > Good point.
> >
> > Jose
> 
> You also might want to remove the workaround in free_gallivm_state.
> My
> impression is that it works around that bug.
>

All those commented code in free_gallivm_state are workarounds for globals in 
LLVM which can never be safely destroyed. These workarounds need to be 
revisited for newer LLVM version, but I believe they are independent of the 
issue we saw here.  The fact that draw module crashed is because the underlying 
LLVM structures were properly destroyed.

Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to