提交 06e4b1cc authored 作者: Alexander Matyasko's avatar Alexander Matyasko

Deference pointer explicitly to avoid potential memory leaks

上级 b7cd3ce3
...@@ -4,9 +4,8 @@ setup_ext_cuda(); ...@@ -4,9 +4,8 @@ setup_ext_cuda();
#section support_code_struct #section support_code_struct
int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv, int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **A_inv,
PyGpuContextObject *c) { PyGpuContextObject *c) {
PyGpuArrayObject *A_inv = *_A_inv;
const size_t *dims; const size_t *dims;
magma_int_t N, ldwork, info; magma_int_t N, ldwork, info;
magma_int_t *piv = NULL; magma_int_t *piv = NULL;
...@@ -40,12 +39,12 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv, ...@@ -40,12 +39,12 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv,
goto fail; goto fail;
} }
#ifdef INPLACE #ifdef INPLACE
Py_XDECREF(A_inv); Py_XDECREF(*A_inv);
A_inv = A; *A_inv = A;
Py_INCREF(A_inv); Py_INCREF(*A_inv);
#else #else
A_inv = theano_try_copy(A_inv, A); *A_inv = theano_try_copy(*A_inv, A);
if (A_inv == NULL) { if (*A_inv == NULL) {
PyErr_SetString( PyErr_SetString(
PyExc_RuntimeError, PyExc_RuntimeError,
"GpuMagmaMatrixInverse: failed to allocate memory for the output"); "GpuMagmaMatrixInverse: failed to allocate memory for the output");
...@@ -71,7 +70,7 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv, ...@@ -71,7 +70,7 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv,
goto fail; goto fail;
} }
magma_sgetrf_gpu(N, N, (float *)PyGpuArray_DEV_DATA(A_inv), N, piv, &info); magma_sgetrf_gpu(N, N, (float *)PyGpuArray_DEV_DATA(*A_inv), N, piv, &info);
if (info != 0) { if (info != 0) {
PyErr_Format( PyErr_Format(
PyExc_RuntimeError, PyExc_RuntimeError,
...@@ -79,7 +78,7 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv, ...@@ -79,7 +78,7 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv,
magma_strerror(info)); magma_strerror(info));
goto fail; goto fail;
} }
magma_sgetri_gpu(N, (float *)PyGpuArray_DEV_DATA(A_inv), N, piv, magma_sgetri_gpu(N, (float *)PyGpuArray_DEV_DATA(*A_inv), N, piv,
*(float **)dwork, ldwork, &info); *(float **)dwork, ldwork, &info);
if (info != 0) { if (info != 0) {
PyErr_Format( PyErr_Format(
...@@ -89,7 +88,6 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv, ...@@ -89,7 +88,6 @@ int APPLY_SPECIFIC(magma_inv)(PyGpuArrayObject *A, PyGpuArrayObject **_A_inv,
goto fail; goto fail;
} }
res = 0; res = 0;
*_A_inv = A_inv;
fail: fail:
if (piv != NULL) if (piv != NULL)
magma_free(piv); magma_free(piv);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论