[pypy-svn] r69639 - pypy/trunk/pypy/module/oracle

afa at codespeak.net afa at codespeak.net
Wed Nov 25 17:33:37 CET 2009


Author: afa
Date: Wed Nov 25 17:33:36 2009
New Revision: 69639

Modified:
   pypy/trunk/pypy/module/oracle/interp_object.py
   pypy/trunk/pypy/module/oracle/roci.py
Log:
Ensure object cleanup


Modified: pypy/trunk/pypy/module/oracle/interp_object.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_object.py	(original)
+++ pypy/trunk/pypy/module/oracle/interp_object.py	Wed Nov 25 17:33:36 2009
@@ -6,10 +6,18 @@
 
 class W_ObjectType(Wrappable):
     def __init__(self, connection, param):
+        self.tdo = None
         self.environment = connection.environment
         self.isCollection = False
         self.initialize(connection, param)
 
+    def __del__(self):
+        if self.tdo:
+            roci.OCIObjectUnpin(
+                self.environment.handle,
+                self.environment.errorHandle,
+                self.tdo)
+
     def initialize(self, connection, param):
         nameptr = lltype.malloc(rffi.CArrayPtr(roci.oratext).TO, 1,
                                 flavor='raw')

Modified: pypy/trunk/pypy/module/oracle/roci.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/roci.py	(original)
+++ pypy/trunk/pypy/module/oracle/roci.py	Wed Nov 25 17:33:36 2009
@@ -69,7 +69,7 @@
     OCI_NTV_SYNTAX OCI_COMMIT_ON_SUCCESS
     OCI_FETCH_NEXT
     OCI_IND_NULL OCI_IND_NOTNULL
-    OCI_PIN_ANY OCI_LOCK_NONE
+    OCI_PIN_ANY OCI_LOCK_NONE OCI_OBJECTFREE_FORCE
     OCI_OTYPE_PTR OCI_PTYPE_TYPE
     OCI_STMT_SELECT OCI_STMT_CREATE OCI_STMT_DROP OCI_STMT_ALTER
     OCI_STMT_INSERT OCI_STMT_DELETE OCI_STMT_UPDATE
@@ -461,6 +461,14 @@
 
 # OCI Object Pin, Unpin, and Free Functions
 
+OCIObjectFree = external(
+    'OCIObjectFree',
+    [OCIEnv,           # env,
+     OCIError,         # err
+     dvoidp,           # instance
+     ub2],             # flags
+    sword)
+
 OCIObjectPin = external(
     'OCIObjectPin',
     [OCIEnv,           # env,
@@ -473,6 +481,13 @@
      dvoidpp],         # object
     sword)
 
+OCIObjectUnpin = external(
+    'OCIObjectUnpin',
+    [OCIEnv,           # env,
+     OCIError,         # err
+     dvoidp],          # object
+    sword)
+
 # OCI Date, Datetime, and Interval Functions
 
 OCIDateTimeCheck = external(



More information about the Pypy-commit mailing list