summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/stringobject.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 7b02dc8..cceed75 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -296,24 +296,31 @@ resizestring(pv, newsize)
object **pv;
int newsize;
{
- register stringobject *v;
- v = (stringobject *) *pv;
+ register object *v;
+ register stringobject *sv;
+ v = *pv;
if (!is_stringobject(v) || v->ob_refcnt != 1) {
*pv = 0;
DECREF(v);
err_badcall();
return -1;
}
+ /* XXX UNREF/NEWREF interface should be more symmetrical */
+#ifdef TRACE_REFS
+ --ref_total;
+#endif
+ UNREF(v);
*pv = (object *)
realloc((char *)v,
sizeof(stringobject) + newsize * sizeof(char));
if (*pv == NULL) {
- DECREF(v);
+ DEL(v);
err_nomem();
return -1;
}
- v = (stringobject *) *pv;
- v->ob_size = newsize;
- v->ob_sval[newsize] = '\0';
+ NEWREF(*pv);
+ sv = (stringobject *) *pv;
+ sv->ob_size = newsize;
+ sv->ob_sval[newsize] = '\0';
return 0;
}