[PATCH 11 of 11] parsers: use Python memory allocator in find_deepest()

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


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1489090625 28800
#      Thu Mar 09 12:17:05 2017 -0800
# Node ID 95d7483a749d6cdf59001af63b0c9445117d352a
# Parent  db8f2c5eb2010a972f6e4fd9082ce1740b60b880
parsers: use Python memory allocator in find_deepest()

diff --git a/mercurial/parsers.c b/mercurial/parsers.c
--- a/mercurial/parsers.c
+++ b/mercurial/parsers.c
@@ -2026,22 +2026,28 @@ static PyObject *find_deepest(indexObjec
 			maxrev = n;
 	}
 
-	depth = calloc(sizeof(*depth), maxrev + 1);
+	depth = PyMem_Malloc(sizeof(*depth) * (maxrev + 1));
 	if (depth == NULL)
 		return PyErr_NoMemory();
 
-	seen = calloc(sizeof(*seen), maxrev + 1);
+	memset(depth, 0, sizeof(*depth) * (maxrev + 1));
+
+	seen = PyMem_Malloc(sizeof(*seen) * (maxrev + 1));
 	if (seen == NULL) {
 		PyErr_NoMemory();
 		goto bail;
 	}
 
-	interesting = calloc(sizeof(*interesting), 2 << revcount);
+	memset(seen, 0, sizeof(*seen) * (maxrev + 1));
+
+	interesting = PyMem_Malloc(sizeof(*interesting) * (2 << revcount));
 	if (interesting == NULL) {
 		PyErr_NoMemory();
 		goto bail;
 	}
 
+	memset(interesting, 0, sizeof(*interesting) * (2 << revcount));
+
 	if (PyList_Sort(revs) == -1)
 		goto bail;
 
@@ -2141,9 +2147,9 @@ static PyObject *find_deepest(indexObjec
 	keys = PyDict_Keys(dict);
 
 bail:
-	free(depth);
-	free(seen);
-	free(interesting);
+	PyMem_Free(depth);
+	PyMem_Free(seen);
+	PyMem_Free(interesting);
 	Py_XDECREF(dict);
 
 	return keys;


More information about the Mercurial-devel mailing list