diff -urN Mesa-8.0.3-orig/src/mesa/drivers/dri/i965/brw_gs.c Mesa-8.0.3/src/mesa/drivers/dri/i965/brw_gs.c
--- Mesa-8.0.3-orig/src/mesa/drivers/dri/i965/brw_gs.c	2012-03-23 02:10:07 +0900
+++ Mesa-8.0.3/src/mesa/drivers/dri/i965/brw_gs.c	2012-05-28 22:56:29 +0900
@@ -60,7 +60,7 @@
    brw_compute_vue_map(&c.vue_map, intel, c.key.userclip_active, c.key.attrs);
    c.nr_regs = (c.vue_map.num_slots + 1)/2;
 
-   mem_ctx = NULL;
+   mem_ctx = ralloc_context(NULL);
    
    /* Begin the compilation:
     */
diff -urN Mesa-8.0.3-orig/src/mesa/main/shaderobj.c Mesa-8.0.3/src/mesa/main/shaderobj.c
--- Mesa-8.0.3-orig/src/mesa/main/shaderobj.c	2012-03-23 02:10:07 +0900
+++ Mesa-8.0.3/src/mesa/main/shaderobj.c	2012-05-28 22:56:22 +0900
@@ -277,7 +277,10 @@
                                 struct gl_shader_program *shProg)
 {
    if (shProg->UniformStorage) {
-      _mesa_uniform_detach_all_driver_storage(shProg->UniformStorage);
+      unsigned i;
+      for (i = 0; i < shProg->NumUserUniformStorage; i++) {
+         _mesa_uniform_detach_all_driver_storage(&shProg->UniformStorage[i]);
+      }
       ralloc_free(shProg->UniformStorage);
       shProg->NumUserUniformStorage = 0;
       shProg->UniformStorage = NULL;
diff -urN Mesa-8.0.3-orig/src/mesa/program/hash_table.h Mesa-8.0.3/src/mesa/program/hash_table.h
--- Mesa-8.0.3-orig/src/mesa/program/hash_table.h	2012-03-23 02:10:07 +0900
+++ Mesa-8.0.3/src/mesa/program/hash_table.h	2012-05-28 22:56:22 +0900
@@ -219,6 +219,7 @@
     */
    void clear()
    {
+      hash_table_call_foreach(this->ht, delete_key, NULL);
       hash_table_clear(this->ht);
    }
 
