[Python-checkins] r78564 - in python/branches/release26-maint: Lib/bsddb/test/test_compare.py Lib/bsddb/test/test_replication.py Misc/NEWS Modules/_bsddb.c

florent.xicluna python-checkins at python.org
Mon Mar 1 22:08:22 CET 2010


Author: florent.xicluna
Date: Mon Mar 1 22:08:21 2010
New Revision: 78564
Log:
Merged revisions 78563 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk
........
 r78563 | florent.xicluna | 2010年03月01日 21:45:01 +0100 (lun, 01 mar 2010) | 2 lines
 
 #7808: Fix reference leaks in _bsddb and related tests.
........
Modified:
 python/branches/release26-maint/ (props changed)
 python/branches/release26-maint/Lib/bsddb/test/test_compare.py
 python/branches/release26-maint/Lib/bsddb/test/test_replication.py
 python/branches/release26-maint/Misc/NEWS
 python/branches/release26-maint/Modules/_bsddb.c
Modified: python/branches/release26-maint/Lib/bsddb/test/test_compare.py
==============================================================================
--- python/branches/release26-maint/Lib/bsddb/test/test_compare.py	(original)
+++ python/branches/release26-maint/Lib/bsddb/test/test_compare.py	Mon Mar 1 22:08:21 2010
@@ -193,6 +193,7 @@
 errorOut = temp.getvalue()
 if not successRe.search(errorOut):
 self.fail("unexpected stderr output:\n"+errorOut)
+ sys.exc_traceback = sys.last_traceback = None
 
 def _test_compare_function_exception (self):
 self.startTest ()
Modified: python/branches/release26-maint/Lib/bsddb/test/test_replication.py
==============================================================================
--- python/branches/release26-maint/Lib/bsddb/test/test_replication.py	(original)
+++ python/branches/release26-maint/Lib/bsddb/test/test_replication.py	Mon Mar 1 22:08:21 2010
@@ -4,6 +4,7 @@
 import os
 import time
 import unittest
+import weakref
 
 from test_all import db, test_support, have_threads, verbose, \
 get_new_environment_path, get_new_database_path
@@ -34,13 +35,16 @@
 | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK |
 db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666)
 
+ wr = weakref.ref(self)
 self.confirmed_master=self.client_startupdone=False
 def confirmed_master(a,b,c) :
 if b==db.DB_EVENT_REP_MASTER :
+ self = wr()
 self.confirmed_master=True
 
 def client_startupdone(a,b,c) :
 if b==db.DB_EVENT_REP_STARTUPDONE :
+ self = wr()
 self.client_startupdone=True
 
 self.dbenvMaster.set_event_notify(confirmed_master)
@@ -215,12 +219,15 @@
 class DBBaseReplication(DBReplicationManager):
 def setUp(self) :
 DBReplicationManager.setUp(self)
+ wr = weakref.ref(self)
 def confirmed_master(a,b,c) :
 if (b == db.DB_EVENT_REP_MASTER) or (b == db.DB_EVENT_REP_ELECTED) :
+ self = wr()
 self.confirmed_master = True
 
 def client_startupdone(a,b,c) :
 if b == db.DB_EVENT_REP_STARTUPDONE :
+ self = wr()
 self.client_startupdone = True
 
 self.dbenvMaster.set_event_notify(confirmed_master)
@@ -233,9 +240,11 @@
 # There are only two nodes, so we don't need to
 # do any routing decision
 def m2c(dbenv, control, rec, lsnp, envid, flags) :
+ self = wr()
 self.m2c.put((control, rec))
 
 def c2m(dbenv, control, rec, lsnp, envid, flags) :
+ self = wr()
 self.c2m.put((control, rec))
 
 self.dbenvMaster.rep_set_transport(13,m2c)
@@ -252,10 +261,12 @@
 #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True)
 
 def thread_master() :
+ self = wr()
 return self.thread_do(self.dbenvMaster, self.c2m, 3,
 self.master_doing_election, True)
 
 def thread_client() :
+ self = wr()
 return self.thread_do(self.dbenvClient, self.m2c, 13,
 self.client_doing_election, False)
 
@@ -408,6 +419,7 @@
 break
 except db.DBRepUnavailError :
 pass
+
 if not election_status[0] and not self.confirmed_master :
 from threading import Thread
 election_status[0] = True
Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Mon Mar 1 22:08:21 2010
@@ -241,6 +241,8 @@
 Extension Modules
 -----------------
 
+- Issue #7808: Fix reference leaks in _bsddb and related tests.
+
 - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
 msvcr100.dll is not a platform assembly anymore.
 
Modified: python/branches/release26-maint/Modules/_bsddb.c
==============================================================================
--- python/branches/release26-maint/Modules/_bsddb.c	(original)
+++ python/branches/release26-maint/Modules/_bsddb.c	Mon Mar 1 22:08:21 2010
@@ -2382,8 +2382,6 @@
 
 	args = BuildValue_SS(leftKey->data, leftKey->size, rightKey->data, rightKey->size);
 	if (args != NULL) {
-		/* XXX(twouters) I highly doubt this INCREF is correct */
-		Py_INCREF(self);
 		result = PyEval_CallObject(self->btCompareCallback, args);
 	}
 	if (args == NULL || result == NULL) {
@@ -2432,10 +2430,12 @@
 if (result == NULL)
 return NULL;
 if (!NUMBER_Check(result)) {
+	Py_DECREF(result);
 	PyErr_SetString(PyExc_TypeError,
 		 "callback MUST return an int");
 	return NULL;
 } else if (NUMBER_AsLong(result) != 0) {
+	Py_DECREF(result);
 	PyErr_SetString(PyExc_TypeError,
 		 "callback failed to return 0 on two empty strings");
 	return NULL;
@@ -5776,6 +5776,8 @@
 free(listp);
 return NULL;
 }
+ Py_DECREF(key);
+ Py_DECREF(tuple);
 }
 free(listp);
 return stats;
@@ -7578,4 +7580,3 @@
 return PyInit__bsddb(); /* Note the two underscores */
 #endif
 }
-


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /