github pull request #1086 - obufs in sortloot()

Pull request by entrez:  sortloot could churn through every obuf[].
Change it to release them as soon as they're used, like the fix for
inventory display in commit e43ec0cef1
two years ago.

I don't have a test case.

Closes #1086
This commit is contained in:
PatR
2023-08-15 14:34:25 -07:00

View File

@@ -320,7 +320,7 @@ sortloot_cmp(const genericptr vptr1, const genericptr vptr2)
*sli2 = (struct sortloot_item *) vptr2; *sli2 = (struct sortloot_item *) vptr2;
struct obj *obj1 = sli1->obj, struct obj *obj1 = sli1->obj,
*obj2 = sli2->obj; *obj2 = sli2->obj;
char *nam1, *nam2; char *nam1, *nam2, *tmpstr;
int val1, val2, namcmp; int val1, val2, namcmp;
/* order by object class unless we're doing by-invlet without sortpack */ /* order by object class unless we're doing by-invlet without sortpack */
@@ -382,11 +382,17 @@ sortloot_cmp(const genericptr vptr1, const genericptr vptr2)
* comparisons it gets subjected to. * comparisons it gets subjected to.
*/ */
nam1 = sli1->str; nam1 = sli1->str;
if (!nam1) if (!nam1) {
nam1 = sli1->str = dupstr(loot_xname(obj1)); tmpstr = loot_xname(obj1);
nam1 = sli1->str = dupstr(tmpstr);
maybereleaseobuf(tmpstr);
}
nam2 = sli2->str; nam2 = sli2->str;
if (!nam2) if (!nam2) {
nam2 = sli2->str = dupstr(loot_xname(obj2)); tmpstr = loot_xname(obj2);
nam2 = sli2->str = dupstr(tmpstr);
maybereleaseobuf(tmpstr);
}
if ((namcmp = strcmpi(nam1, nam2)) != 0) if ((namcmp = strcmpi(nam1, nam2)) != 0)
return namcmp; return namcmp;