[cig-commits] r9222 - mc/3D/CitcomS/trunk/module/Exchanger

tan2 at geodynamics.org tan2 at geodynamics.org
Mon Feb 4 15:13:23 PST 2008


Author: tan2
Date: 2008-02-04 15:13:23 -0800 (Mon, 04 Feb 2008)
New Revision: 9222

Modified:
   mc/3D/CitcomS/trunk/module/Exchanger/exchangers.cc
Log:
Fixed bugs in managing reference counts and potential double-free

Modified: mc/3D/CitcomS/trunk/module/Exchanger/exchangers.cc
===================================================================
--- mc/3D/CitcomS/trunk/module/Exchanger/exchangers.cc	2008-02-04 22:32:22 UTC (rev 9221)
+++ mc/3D/CitcomS/trunk/module/Exchanger/exchangers.cc	2008-02-04 23:13:23 UTC (rev 9222)
@@ -67,8 +67,9 @@
     BoundedBox* bbox = const_cast<BoundedBox*>(&(b->bbox()));
 
     PyObject *cobj1 = PyCObject_FromVoidPtr(b, deleteBoundary);
-    PyObject *cobj2 = PyCObject_FromVoidPtr(bbox, deleteBoundedBox);
-    return Py_BuildValue("OO", cobj1, cobj2);
+    /* the memory of bbox is managed by b, no need to call its d'ctor */
+    PyObject *cobj2 = PyCObject_FromVoidPtr(bbox, NULL);
+    return Py_BuildValue("NN", cobj1, cobj2);
 }
 
 
@@ -80,7 +81,7 @@
     Boundary* b = new Boundary();
 
     PyObject *cobj = PyCObject_FromVoidPtr(b, deleteBoundary);
-    return Py_BuildValue("O", cobj);
+    return Py_BuildValue("N", cobj);
 }
 
 
@@ -92,7 +93,7 @@
     Interior* b = new Interior();
 
     PyObject *cobj = PyCObject_FromVoidPtr(b, deleteInterior);
-    return Py_BuildValue("O", cobj);
+    return Py_BuildValue("N", cobj);
 }
 
 
@@ -122,7 +123,7 @@
     bbox->print("CitcomS-GlobalBBox");
 
     PyObject *cobj = PyCObject_FromVoidPtr(bbox, deleteBoundedBox);
-    return Py_BuildValue("O", cobj);
+    return Py_BuildValue("N", cobj);
 }
 
 
@@ -144,8 +145,9 @@
     BoundedBox* bbox = const_cast<BoundedBox*>(&(i->bbox()));
 
     PyObject *cobj1 = PyCObject_FromVoidPtr(i, deleteInterior);
-    PyObject *cobj2 = PyCObject_FromVoidPtr(bbox, deleteBoundedBox);
-    return Py_BuildValue("OO", cobj1, cobj2);
+    /* the memory of bbox is managed by i, no need to call its d'ctor */
+    PyObject *cobj2 = PyCObject_FromVoidPtr(bbox, NULL);
+    return Py_BuildValue("NN", cobj1, cobj2);
 }
 
 
@@ -233,7 +235,7 @@
     CitcomSource* source = new CitcomSource(comm, sinkRank, *b, *bbox, E);
 
     PyObject *cobj = PyCObject_FromVoidPtr(source, deleteCitcomSource);
-    return Py_BuildValue("O", cobj);
+    return Py_BuildValue("N", cobj);
 }
 
 



More information about the cig-commits mailing list