Changeset 2846


Ignore:
Timestamp:
May 11, 2006, 3:15:56 PM (18 years ago)
Author:
jack
Message:

Plugged a memory leak and improved graceful exits on errors.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inundation/pymetis/pymetis/metis.c

    r2845 r2846  
    4343static PyObject * metis_partMeshNodal(PyObject * self, PyObject * args){
    4444  int i;
     45  int malloc_elem_c_arr = 0;
    4546  int ne;
    4647  int nn;
     
    7374  if(elem_arr->descr->type_num == PyArray_LONG){
    7475    elem_c_arr = (idxtype *)malloc(*(elem_arr->dimensions) * sizeof(idxtype));
     76    malloc_elem_c_arr;
    7577    if(!elem_c_arr)
    7678        return NULL;
    7779    for(i = 0 ; i < *(elem_arr->dimensions) ; i++){
    7880      elem_c_arr[i] = (idxtype)(((long *)elem_arr->data)[i]);
    79       if(elem_c_arr[i] != ((long *)elem_arr->data)[i]) /* i.e. downcast failed */
    80         return null;
     81      if(elem_c_arr[i] != ((long *)elem_arr->data)[i]){ /* i.e. downcast failed */
     82        free(elem_c_arr);
     83        Py_DECREF(elem_arr);
     84        return NULL;
    8185    }
    8286  }else
     
    8589  epart = (idxtype *)malloc(ne * sizeof(idxtype));
    8690  if(epart == NULL){
     91    if(malloc_elem_c_arr) free(elem_c_arr);
    8792    Py_DECREF(elem_arr);
    8893    return NULL;
     
    9095  npart = (idxtype *)malloc(nn * sizeof(idxtype));
    9196  if(npart == NULL){
     97    if(malloc_elem_c_arr) free(elem_c_arr);
    9298    free(epart);
    9399    Py_DECREF(elem_arr);
     
    101107  npart_pyarr = (PyArrayObject *)PyArray_FromDimsAndData(1, dims, PyArray_INT, (char *)npart);
    102108
     109 
     110  if(malloc_elem_c_arr) free(elem_c_arr);
    103111  Py_DECREF(elem_arr);
    104112
Note: See TracChangeset for help on using the changeset viewer.