diff options
author | Keith Whitwell <keith@tungstengraphics.com> | 2001-05-09 13:53:36 +0000 |
---|---|---|
committer | Keith Whitwell <keith@tungstengraphics.com> | 2001-05-09 13:53:36 +0000 |
commit | bcf749e83a4844972b8fbb84e9762a9b1ec77c5f (patch) | |
tree | 095ccd846c8bc7b02f9363506f2e1f8e8f26ca8c /src/mesa | |
parent | 335634b807921285bec0709ee92c454cee87ee88 (diff) |
fix possible segfault on destroy context
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/tnl/t_context.c | 4 | ||||
-rw-r--r-- | src/mesa/tnl/t_imm_alloc.c | 17 | ||||
-rw-r--r-- | src/mesa/tnl/t_imm_exec.c | 5 |
3 files changed, 16 insertions, 10 deletions
diff --git a/src/mesa/tnl/t_context.c b/src/mesa/tnl/t_context.c index bea2e37650..f52820840b 100644 --- a/src/mesa/tnl/t_context.c +++ b/src/mesa/tnl/t_context.c @@ -1,4 +1,4 @@ -/* $Id: t_context.c,v 1.16 2001/03/19 02:25:36 keithw Exp $ */ +/* $Id: t_context.c,v 1.17 2001/05/09 13:53:36 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -132,10 +132,8 @@ _tnl_DestroyContext( GLcontext *ctx ) { TNLcontext *tnl = TNL_CONTEXT(ctx); -/* _tnl_dlist_destroy( ctx ); */ _tnl_array_destroy( ctx ); _tnl_imm_destroy( ctx ); -/* _tnl_eval_destroy( ctx ); */ _tnl_destroy_pipeline( ctx ); FREE(tnl); diff --git a/src/mesa/tnl/t_imm_alloc.c b/src/mesa/tnl/t_imm_alloc.c index 2b497a7058..22bdb7a7bb 100644 --- a/src/mesa/tnl/t_imm_alloc.c +++ b/src/mesa/tnl/t_imm_alloc.c @@ -1,4 +1,4 @@ -/* $Id: t_imm_alloc.c,v 1.7 2001/04/30 21:08:52 keithw Exp $ */ +/* $Id: t_imm_alloc.c,v 1.8 2001/05/09 13:53:36 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -118,14 +118,21 @@ struct immediate *_tnl_alloc_immediate( GLcontext *ctx ) return real_alloc_immediate( ctx ); } +/* May be called after tnl is destroyed. + */ void _tnl_free_immediate( struct immediate *IM ) { TNLcontext *tnl = TNL_CONTEXT(IM->backref); ASSERT(IM->ref_count == 0); - if (tnl->freed_immediate) - real_free_immediate( tnl->freed_immediate ); - - tnl->freed_immediate = IM; + if (!tnl) { + real_free_immediate( IM ); + } + else { + if (tnl->freed_immediate) + real_free_immediate( tnl->freed_immediate ); + + tnl->freed_immediate = IM; + } } diff --git a/src/mesa/tnl/t_imm_exec.c b/src/mesa/tnl/t_imm_exec.c index 25de9a2af3..adb79ab7d5 100644 --- a/src/mesa/tnl/t_imm_exec.c +++ b/src/mesa/tnl/t_imm_exec.c @@ -1,4 +1,4 @@ -/* $Id: t_imm_exec.c,v 1.21 2001/05/03 16:49:27 keithw Exp $ */ +/* $Id: t_imm_exec.c,v 1.22 2001/05/09 13:53:36 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -554,7 +554,8 @@ void _tnl_imm_destroy( GLcontext *ctx ) { if (TNL_CURRENT_IM(ctx)) { TNL_CURRENT_IM(ctx)->ref_count--; - _tnl_free_immediate( TNL_CURRENT_IM(ctx) ); + if (TNL_CURRENT_IM(ctx)->ref_count == 0) + _tnl_free_immediate( TNL_CURRENT_IM(ctx) ); SET_IMMEDIATE(ctx, 0); } } |