[PATCH 05 of 11] parsers: use Python memory allocator for indexObject->cache

Gregory Szorc gregory.szorc at gmail.com
Thu Mar 9 16:59:13 EST 2017


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1489090097 28800
#      Thu Mar 09 12:08:17 2017 -0800
# Node ID 4a97eb780de33a2ddce8e25ce8d91353a7630b7b
# Parent  0c7e93c77e5a0280717ab3f0d4aaf11efa38a164
parsers: use Python memory allocator for indexObject->cache

Again, Python 2 doesn't have a calloc() equivalent. So we do a manual
memset().

diff --git a/mercurial/parsers.c b/mercurial/parsers.c
--- a/mercurial/parsers.c
+++ b/mercurial/parsers.c
@@ -882,9 +882,11 @@ static PyObject *index_get(indexObject *
 			return self->cache[pos];
 		}
 	} else {
-		self->cache = calloc(self->raw_length, sizeof(PyObject *));
+		self->cache = PyMem_Malloc(self->raw_length * sizeof(PyObject *));
 		if (self->cache == NULL)
 			return PyErr_NoMemory();
+
+		memset(self->cache, 0, self->raw_length * sizeof(PyObject *));
 	}
 
 	data = index_deref(self, pos);
@@ -1010,7 +1012,7 @@ static void _index_clearcaches(indexObje
 
 		for (i = 0; i < self->raw_length; i++)
 			Py_CLEAR(self->cache[i]);
-		free(self->cache);
+		PyMem_Free(self->cache);
 		self->cache = NULL;
 	}
 	if (self->offsets) {


More information about the Mercurial-devel mailing list