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 }