Print this page
3992 mdb ::stacks segv

@@ -19,10 +19,11 @@
  * CDDL HEADER END
  */
 
 /*
  * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
  */
 
 #include <mdb/mdb_modapi.h>
 #include <mdb/mdb_ctf.h>
 

@@ -338,10 +339,12 @@
                 }
                 if (stacks_array != NULL)
                         mdb_free(stacks_array,
                             stacks_array_size * sizeof (*stacks_array));
 
+                mdb_free(stacks_hash, STACKS_HSIZE * sizeof (*stacks_hash));
+
         } else if (stacks_array != NULL) {
                 for (idx = 0; idx < stacks_array_size; idx++) {
                         if ((cur = stacks_array[idx]) != NULL) {
                                 while ((next = cur->se_dup) != NULL) {
                                         cur->se_dup = next->se_dup;

@@ -358,10 +361,12 @@
 
         stacks_findstack_cleanup();
 
         stacks_array_size = 0;
         stacks_state = STACKS_STATE_CLEAN;
+        stacks_hash = NULL;
+        stacks_array = NULL;
 }
 
 /*ARGSUSED*/
 int
 stacks_thread_cb(uintptr_t addr, const void *ignored, void *cbarg)