mesa: use _mesa_delete_query in drivers

Now drivers can call _mesa_delete_query once driver-specific
clean-up has been done. Brings into conformity with how other GL
objects are handled.

CC: Eric Anholt <eric@anholt.net>
CC: Kenneth Graunke <kenneth@whitecape.org>

Suggested-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Yevhenii Kolesnikov <yevhenii.kolesnikov@globallogic.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
diff --git a/src/mesa/drivers/dri/i965/brw_queryobj.c b/src/mesa/drivers/dri/i965/brw_queryobj.c
index c6bd571..c48f853 100644
--- a/src/mesa/drivers/dri/i965/brw_queryobj.c
+++ b/src/mesa/drivers/dri/i965/brw_queryobj.c
@@ -36,6 +36,7 @@
  * needs.
  */
 #include "main/imports.h"
+#include "main/queryobj.h"
 
 #include "brw_context.h"
 #include "brw_defines.h"
@@ -239,8 +240,7 @@
    struct brw_query_object *query = (struct brw_query_object *)q;
 
    brw_bo_unreference(query->bo);
-   free(query->Base.Label);
-   free(query);
+   _mesa_delete_query(ctx, q);
 }
 
 /**
diff --git a/src/mesa/drivers/dri/radeon/radeon_queryobj.c b/src/mesa/drivers/dri/radeon/radeon_queryobj.c
index baf7081..c75c1e0 100644
--- a/src/mesa/drivers/dri/radeon/radeon_queryobj.c
+++ b/src/mesa/drivers/dri/radeon/radeon_queryobj.c
@@ -29,6 +29,7 @@
 #include "radeon_debug.h"
 
 #include "main/imports.h"
+#include "main/queryobj.h"
 
 #include <inttypes.h>
 
@@ -80,7 +81,7 @@
 		radeon_bo_unref(query->bo);
 	}
 
-	free(query);
+	_mesa_delete_query(ctx, q);
 }
 
 static void radeonWaitQuery(struct gl_context *ctx, struct gl_query_object *q)
diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
index 67d1f76..b2740c5 100644
--- a/src/mesa/main/queryobj.c
+++ b/src/mesa/main/queryobj.c
@@ -120,10 +120,15 @@
 
 
 /**
- * Delete a query object.  Called via ctx->Driver.DeleteQuery().
+ * Delete a query object.  Called via ctx->Driver.DeleteQuery(), if not
+ * overwritten by driver.  In the latter case, called from the driver
+ * after all driver-specific clean-up has been done.
  * Not removed from hash table here.
+ *
+ * \param ctx GL context to wich query object belongs.
+ * \param q query object due to be deleted.
  */
-static void
+void
 _mesa_delete_query(struct gl_context *ctx, struct gl_query_object *q)
 {
    free(q->Label);
diff --git a/src/mesa/main/queryobj.h b/src/mesa/main/queryobj.h
index 24a8257..ba8336b 100644
--- a/src/mesa/main/queryobj.h
+++ b/src/mesa/main/queryobj.h
@@ -48,6 +48,9 @@
 extern void
 _mesa_free_queryobj_data(struct gl_context *ctx);
 
+extern void
+_mesa_delete_query(struct gl_context *ctx, struct gl_query_object *q);
+
 void GLAPIENTRY
 _mesa_GenQueries(GLsizei n, GLuint *ids);
 void GLAPIENTRY
diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
index 9694876..14de243 100644
--- a/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/src/mesa/state_tracker/st_cb_queryobj.c
@@ -36,6 +36,7 @@
 #include "main/imports.h"
 #include "main/compiler.h"
 #include "main/context.h"
+#include "main/queryobj.h"
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
@@ -86,8 +87,7 @@
 
    free_queries(pipe, stq);
 
-   free(q->Label);
-   free(stq);
+   _mesa_delete_query(ctx, q);
 }
 
 static int