Commit 3a53d866 authored by James Bowman's avatar James Bowman

#489, leaking cvarrmat test and fix

parent 68ed806b
...@@ -1734,11 +1734,21 @@ static int convert_to_pts_npts_contours(PyObject *o, pts_npts_contours *dst, con ...@@ -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 ...@@ -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);
......
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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment