Print this page
Address Robert's feedback

@@ -209,25 +209,25 @@
 
         res = sysdemangle(name + prefixlen, dmp->dm_lang, &mdb_dem_demops);
         if (res == NULL && errno != EINVAL)
                 mdb_warn("Error while demangling");
 
-        mdb_free(dmp->dm_buf, dmp->dm_len);
-        dmp->dm_dem = NULL;
-        dmp->dm_len = 0;
-
         reslen = (res != NULL) ? strlen(res) : 0;
         reslen += prefixlen;
         reslen += 1;
 
+        if (reslen > dmp->dm_len) {
+                mdb_free(dmp->dm_buf, dmp->dm_len);
+
         dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
         if (dmp->dm_buf == NULL) {
+                        dmp->dm_len = 0;
                 mdb_warn("Unable to allocate memory for demangling");
                 return (-1);
         }
-
         dmp->dm_len = reslen;
+        }
 
         if (prefixlen > 0)
                 (void) strlcpy(dmp->dm_buf, name, prefixlen);
         if (res != NULL)
                 (void) strlcat(dmp->dm_buf, res, dmp->dm_len);