# HG changeset patch # User Martin von Zweigbergk # Date 2018-08-07 05:24:34 # Node ID 05c1f5f49ebbd53b6a520991c86e6311617d8d6e # Parent 27a54096c92e22143d7103a4b61443c0a7621aef index: use PyMem_Free() to free nodeetree instance As Yuya pointed out in the review of D4108, PyMem_Malloc() and PyMem_Free() should be paired. IIUC, PyMem_Malloc() may use a different allocator than malloc(), so using free() with a pointer from PyMem_Malloc() may be very wrong. Differential Revision: https://phab.mercurial-scm.org/D4152 diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c +++ b/mercurial/cext/revlog.c @@ -323,7 +323,7 @@ static void _index_clearcaches(indexObje } if (self->nt != NULL) { free(self->nt->nodes); - free(self->nt); + PyMem_Free(self->nt); } self->nt = NULL; Py_CLEAR(self->headrevs); @@ -1106,7 +1106,7 @@ static int nt_init(indexObject *self) self->nt->nodes = calloc(self->nt->capacity, sizeof(nodetreenode)); if (self->nt->nodes == NULL) { - free(self->nt); + PyMem_Free(self->nt); self->nt = NULL; PyErr_NoMemory(); return -1; @@ -1119,7 +1119,7 @@ static int nt_init(indexObject *self) self->nt->length = 1; if (nt_insert(self, nullid, -1) == -1) { free(self->nt->nodes); - free(self->nt); + PyMem_Free(self->nt); self->nt = NULL; return -1; }