#489, leaking cvarrmat test and fix
This commit is contained in:
parent
68ed806be0
commit
3a53d8667a
@ -1734,11 +1734,21 @@ static int convert_to_pts_npts_contours(PyObject *o, pts_npts_contours *dst, con
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cvarrseq {
|
class cvarrseq {
|
||||||
|
public:
|
||||||
union {
|
union {
|
||||||
CvSeq *seq;
|
CvSeq *seq;
|
||||||
CvArr *mat;
|
CvArr *mat;
|
||||||
};
|
};
|
||||||
|
int freemat;
|
||||||
|
cvarrseq() {
|
||||||
|
freemat = false;
|
||||||
|
}
|
||||||
|
~cvarrseq() {
|
||||||
|
if (freemat) {
|
||||||
|
cvReleaseMat((CvMat**)&mat);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static int is_convertible_to_mat(PyObject *o)
|
static int is_convertible_to_mat(PyObject *o)
|
||||||
@ -1782,6 +1792,7 @@ static int convert_to_cvarrseq(PyObject *o, cvarrseq *dst, const char *name = "n
|
|||||||
}
|
}
|
||||||
assert(size != -1);
|
assert(size != -1);
|
||||||
CvMat *mt = cvCreateMat((int)PySequence_Fast_GET_SIZE(fi), 1, CV_32SC(size));
|
CvMat *mt = cvCreateMat((int)PySequence_Fast_GET_SIZE(fi), 1, CV_32SC(size));
|
||||||
|
dst->freemat = true; // dealloc this mat when done
|
||||||
for (Py_ssize_t i = 0; i < PySequence_Fast_GET_SIZE(fi); i++) {
|
for (Py_ssize_t i = 0; i < PySequence_Fast_GET_SIZE(fi); i++) {
|
||||||
PyObject *e = PySequence_Fast_GET_ITEM(fi, i);
|
PyObject *e = PySequence_Fast_GET_ITEM(fi, i);
|
||||||
PyObject *fe = PySequence_Fast(e, name);
|
PyObject *fe = PySequence_Fast(e, name);
|
||||||
|
9
tests/python/leak4.py
Normal file
9
tests/python/leak4.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import cv
|
||||||
|
import math
|
||||||
|
import time
|
||||||
|
|
||||||
|
N=50000
|
||||||
|
print "leak4"
|
||||||
|
while True:
|
||||||
|
seq=list((i*1., i*1.) for i in range(N))
|
||||||
|
cv.Moments(seq)
|
Loading…
Reference in New Issue
Block a user