Commit 1c1a1c5a authored by Neal Norwitz's avatar Neal Norwitz

Add more details when releasing interned strings

parent 6fbb96e6
...@@ -4969,6 +4969,7 @@ void _Py_ReleaseInternedStrings(void) ...@@ -4969,6 +4969,7 @@ void _Py_ReleaseInternedStrings(void)
PyObject *keys; PyObject *keys;
PyStringObject *s; PyStringObject *s;
Py_ssize_t i, n; Py_ssize_t i, n;
Py_ssize_t immortal_size = 0, mortal_size = 0;
if (interned == NULL || !PyDict_Check(interned)) if (interned == NULL || !PyDict_Check(interned))
return; return;
...@@ -4983,8 +4984,9 @@ void _Py_ReleaseInternedStrings(void) ...@@ -4983,8 +4984,9 @@ void _Py_ReleaseInternedStrings(void)
give them their stolen references back, and then clear and DECREF give them their stolen references back, and then clear and DECREF
the interned dict. */ the interned dict. */
fprintf(stderr, "releasing interned strings\n");
n = PyList_GET_SIZE(keys); n = PyList_GET_SIZE(keys);
fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n",
n);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
s = (PyStringObject *) PyList_GET_ITEM(keys, i); s = (PyStringObject *) PyList_GET_ITEM(keys, i);
switch (s->ob_sstate) { switch (s->ob_sstate) {
...@@ -4993,15 +4995,20 @@ void _Py_ReleaseInternedStrings(void) ...@@ -4993,15 +4995,20 @@ void _Py_ReleaseInternedStrings(void)
break; break;
case SSTATE_INTERNED_IMMORTAL: case SSTATE_INTERNED_IMMORTAL:
s->ob_refcnt += 1; s->ob_refcnt += 1;
immortal_size += s->ob_size;
break; break;
case SSTATE_INTERNED_MORTAL: case SSTATE_INTERNED_MORTAL:
s->ob_refcnt += 2; s->ob_refcnt += 2;
mortal_size += s->ob_size;
break; break;
default: default:
Py_FatalError("Inconsistent interned string state."); Py_FatalError("Inconsistent interned string state.");
} }
s->ob_sstate = SSTATE_NOT_INTERNED; s->ob_sstate = SSTATE_NOT_INTERNED;
} }
fprintf(stderr, "total size of all interned strings: "
"%" PY_FORMAT_SIZE_T "d/%" PY_FORMAT_SIZE_T "d "
"mortal/immortal\n", mortal_size, immortal_size);
Py_DECREF(keys); Py_DECREF(keys);
PyDict_Clear(interned); PyDict_Clear(interned);
Py_DECREF(interned); Py_DECREF(interned);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment