[Mesa-dev] [PATCH 12/21] mesa: refactor _mesa_PopDebugGroup and _mesa_free_errors_data

Timothy Arceri t_arceri at yahoo.com.au
Tue Apr 22 05:25:48 PDT 2014


On Tue, 2014-04-22 at 21:31 +1000, Timothy Arceri wrote:
> On Tue, 2014-04-22 at 16:58 +0800, Chia-I Wu wrote:
> > Move group clearing to debug_clear_group.  Add debug_pop_group and
> > debug_destroy for use in _mesa_PopDebugGroup and _mesa_free_errors_data
> > respectively.
> 
> debug_destroy is not very specific debug_destroy_groups maybe? 

Please ignore my comment I see now that this is does free the debug
context too.

> 
> > 
> > Signed-off-by: Chia-I Wu <olv at lunarg.com>
> > ---
> >  src/mesa/main/errors.c | 127 +++++++++++++++++++++++++------------------------
> >  1 file changed, 64 insertions(+), 63 deletions(-)
> > 
> > diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
> > index 9873dfc..139e31d 100644
> > --- a/src/mesa/main/errors.c
> > +++ b/src/mesa/main/errors.c
> > @@ -217,7 +217,57 @@ debug_create(void)
> >     return debug;
> >  }
> >  
> > -/*
> > +static void
> > +debug_clear_group_cb(GLuint key, void *data, void *userData)
> > +{
> > +}
> > +
> > +/**
> > + * Free debug state for the given stack depth.
> > + */
> > +static void
> > +debug_clear_group(struct gl_debug_state *debug, GLint gstack)
> > +{
> > +   enum mesa_debug_type t;
> > +   enum mesa_debug_source s;
> > +   enum mesa_debug_severity sev;
> > +
> > +   /* Tear down state for filtering debug messages. */
> > +   for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) {
> > +      for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) {
> > +         struct gl_debug_namespace *nspace = &debug->Namespaces[gstack][s][t];
> > +
> > +         _mesa_HashDeleteAll(nspace->IDs, debug_clear_group_cb, NULL);
> > +         _mesa_DeleteHashTable(nspace->IDs);
> > +         for (sev = 0; sev < MESA_DEBUG_SEVERITY_COUNT; sev++) {
> > +            struct simple_node *node, *tmp;
> > +            struct gl_debug_severity *entry;
> > +
> > +            foreach_s(node, tmp, &nspace->Severity[sev]) {
> > +               entry = (struct gl_debug_severity *)node;
> > +               free(entry);
> > +            }
> > +         }
> > +      }
> > +   }
> > +}
> > +
> > +/**
> > + * Loop through debug group stack tearing down states for
> > + * filtering debug messages.  Then free debug output state.
> > + */
> > +static void
> > +debug_destroy(struct gl_debug_state *debug)
> > +{
> > +   GLint i;
> > +
> > +   for (i = 0; i <= debug->GroupStackDepth; i++)
> > +      debug_clear_group(debug, i);
> > +
> > +   free(debug);
> > +}
> > +
> > +/**
> >   * Sets the state of the given message source/type/ID tuple.
> >   */
> >  static void
> > @@ -538,6 +588,15 @@ out:
> >     debug->GroupStackDepth++;
> >  }
> >  
> > +static void
> > +debug_pop_group(struct gl_debug_state *debug)
> > +{
> > +   const GLint gstack = debug->GroupStackDepth;
> > +
> > +   debug->GroupStackDepth--;
> > +   debug_clear_group(debug, gstack);
> > +}
> > +
> >  
> >  /**
> >   * Return debug state for the context.  The debug state will be allocated
> > @@ -840,47 +899,6 @@ message_insert(GLenum source, GLenum type, GLuint id,
> >  }
> >  
> > 
> > -static void
> > -do_nothing(GLuint key, void *data, void *userData)
> > -{
> > -}
> > -
> > -
> > -/**
> > - * Free context state pertaining to error/debug state for the given stack
> > - * depth.
> > - */
> > -static void
> > -free_errors_data(struct gl_context *ctx, GLint gstack)
> > -{
> > -   struct gl_debug_state *debug = ctx->Debug;
> > -   enum mesa_debug_type t;
> > -   enum mesa_debug_source s;
> > -   enum mesa_debug_severity sev;
> > -
> > -   assert(debug);
> > -
> > -   /* Tear down state for filtering debug messages. */
> > -   for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) {
> > -      for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) {
> > -         _mesa_HashDeleteAll(debug->Namespaces[gstack][s][t].IDs,
> > -                             do_nothing, NULL);
> > -         _mesa_DeleteHashTable(debug->Namespaces[gstack][s][t].IDs);
> > -         for (sev = 0; sev < MESA_DEBUG_SEVERITY_COUNT; sev++) {
> > -            struct simple_node *node, *tmp;
> > -            struct gl_debug_severity *entry;
> > -
> > -            foreach_s(node, tmp,
> > -                      &debug->Namespaces[gstack][s][t].Severity[sev]) {
> > -               entry = (struct gl_debug_severity *)node;
> > -               free(entry);
> > -            }
> > -         }
> > -      }
> > -   }
> > -}
> > -
> > -
> >  void GLAPIENTRY
> >  _mesa_DebugMessageInsert(GLenum source, GLenum type, GLuint id,
> >                           GLenum severity, GLint length,
> > @@ -1044,7 +1062,6 @@ _mesa_PopDebugGroup(void)
> >     struct gl_debug_state *debug = _mesa_get_debug_state(ctx);
> >     const char *callerstr = "glPopDebugGroup";
> >     struct gl_debug_msg *gdmessage;
> > -   GLint prevStackDepth;
> >  
> >     if (!debug)
> >        return;
> > @@ -1054,10 +1071,9 @@ _mesa_PopDebugGroup(void)
> >        return;
> >     }
> >  
> > -   prevStackDepth = debug->GroupStackDepth;
> > -   debug->GroupStackDepth--;
> > +   debug_pop_group(debug);
> >  
> > -   gdmessage = &debug->DebugGroupMsgs[prevStackDepth];
> > +   gdmessage = debug_get_group_message(debug);
> >     /* using log_msg() directly here as verification of parameters
> >      * already done in push
> >      */
> > @@ -1067,13 +1083,7 @@ _mesa_PopDebugGroup(void)
> >             gl_enum_to_debug_severity(GL_DEBUG_SEVERITY_NOTIFICATION),
> >             gdmessage->length, gdmessage->message);
> >  
> > -   if (gdmessage->message != (char*)out_of_memory)
> > -      free(gdmessage->message);
> > -   gdmessage->message = NULL;
> > -   gdmessage->length = 0;
> > -
> > -   /* free popped debug group data */
> > -   free_errors_data(ctx, prevStackDepth);
> > +   debug_clear_message(debug, gdmessage);
> >  }
> >  
> > 
> > @@ -1084,20 +1094,11 @@ _mesa_init_errors(struct gl_context *ctx)
> >  }
> >  
> > 
> > -/**
> > - * Loop through debug group stack tearing down states for
> > - * filtering debug messages.  Then free debug output state.
> > - */
> >  void
> >  _mesa_free_errors_data(struct gl_context *ctx)
> >  {
> >     if (ctx->Debug) {
> > -      GLint i;
> > -
> > -      for (i = 0; i <= ctx->Debug->GroupStackDepth; i++) {
> > -         free_errors_data(ctx, i);
> > -      }
> > -      free(ctx->Debug);
> > +      debug_destroy(ctx->Debug);
> >        /* set to NULL just in case it is used before context is completely gone. */
> >        ctx->Debug = NULL;
> >     }
> 
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list