[Zope-Checkins] CVS: Products/DCOracle2/src - dco2.c:1.135

Matthew T. Kromer matt at zope.com
Wed Aug 27 11:40:03 EDT 2003


Update of /cvs-repository/Products/DCOracle2/src
In directory cvs.zope.org:/tmp/cvs-serv28981/src

Modified Files:
	dco2.c 
Log Message:
Fix a memory leak reported by Mihai Ibanescu <misa at redhat.com> where a call
to OCIParamGet did not have a OCIDescriptorFree associated with it.  The leak
was not bad until Oracle 9.2, but then it was terrible.


=== Products/DCOracle2/src/dco2.c 1.134 => 1.135 ===
--- Products/DCOracle2/src/dco2.c:1.134	Mon Aug 11 10:33:15 2003
+++ Products/DCOracle2/src/dco2.c	Wed Aug 27 10:40:02 2003
@@ -2242,6 +2242,12 @@
 			Py_DECREF(result); 
 			return RaiseOCIError(self->errhp, OCI_HTYPE_ERROR); 
 		} */ /* Eat errors here */
+
+		TRACE(T_HCALL,("ssA","OCIDescriptorFree","OCI_DTYPE_PARAM",
+			cparamh));
+		status = OCIDescriptorFree(cparamh, OCI_DTYPE_PARAM);
+		TRACE(T_HRETURN,("sR","OCIDescriptorFree", status));
+
 	}
 
 	TRACE(T_EXIT,("sA", "listColumns", result));
@@ -3539,6 +3545,15 @@
 	status = OCI_SUCCESS;
 
 	for (pos = 1; status == OCI_SUCCESS; pos++) {
+
+		if (paramd != NULL) {
+			TRACE(T_HCALL,("ssA","OCIDescriptorFree","OCI_DTYPE_PARAM",
+				paramd));
+			status = OCIDescriptorFree(paramd, OCI_DTYPE_PARAM);
+			TRACE(T_HRETURN,("sR","OCIDescriptorFree", status));
+			paramd = NULL;
+		}
+
 		TRACE(T_HCALL,("sAsAd", "OCIParamGet", self->stmtp,
 			"OCI_HTYPE_STMT", &paramd, pos));
 		status = OCIParamGet(self->stmtp, OCI_HTYPE_STMT,
@@ -3640,6 +3655,14 @@
 		}
 		Py_DECREF(tuple);
 
+	}
+
+	if (paramd != NULL) {
+		TRACE(T_HCALL,("ssA","OCIDescriptorFree","OCI_DTYPE_PARAM",
+			paramd));
+		status = OCIDescriptorFree(paramd, OCI_DTYPE_PARAM);
+		TRACE(T_HRETURN,("sR","OCIDescriptorFree", status));
+		paramd = NULL;
 	}
 
 	if (self->definition != NULL) {




More information about the Zope-Checkins mailing list