Mercurial > hg
comparison mercurial/manifest.c @ 24974:46408b80c3a1
lazymanifest: avoid 'bail' label when used on success path
3d485727e45e (lazymanifest: extract function for iterating to next
line, 2015-03-11) introduced a large memory leak because I stopped
running the 'bail' block in the successful case. Let's rename 'bail'
to 'done', since it has to run not only in the error case.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Sun, 12 Apr 2015 07:12:39 -0700 |
parents | 909ee6b2a024 |
children | 89c2bf63a83b |
comparison
equal
deleted
inserted
replaced
24973:4c4d0012db4f | 24974:46408b80c3a1 |
---|---|
233 line *l; | 233 line *l; |
234 Py_ssize_t consumed; | 234 Py_ssize_t consumed; |
235 PyObject *ret = NULL, *path = NULL, *hash = NULL, *flags = NULL; | 235 PyObject *ret = NULL, *path = NULL, *hash = NULL, *flags = NULL; |
236 l = lmiter_nextline((lmIter *)o); | 236 l = lmiter_nextline((lmIter *)o); |
237 if (!l) { | 237 if (!l) { |
238 goto bail; | 238 goto done; |
239 } | 239 } |
240 pl = pathlen(l); | 240 pl = pathlen(l); |
241 path = PyString_FromStringAndSize(l->start, pl); | 241 path = PyString_FromStringAndSize(l->start, pl); |
242 hash = nodeof(l); | 242 hash = nodeof(l); |
243 consumed = pl + 41; | 243 consumed = pl + 41; |
244 flags = PyString_FromStringAndSize(l->start + consumed, | 244 flags = PyString_FromStringAndSize(l->start + consumed, |
245 l->len - consumed - 1); | 245 l->len - consumed - 1); |
246 if (!path || !hash || !flags) { | 246 if (!path || !hash || !flags) { |
247 goto bail; | 247 goto done; |
248 } | 248 } |
249 ret = PyTuple_Pack(3, path, hash, flags); | 249 ret = PyTuple_Pack(3, path, hash, flags); |
250 bail: | 250 done: |
251 Py_XDECREF(path); | 251 Py_XDECREF(path); |
252 Py_XDECREF(hash); | 252 Py_XDECREF(hash); |
253 Py_XDECREF(flags); | 253 Py_XDECREF(flags); |
254 return ret; | 254 return ret; |
255 } | 255 } |