]> granicus.if.org Git - python/commitdiff
bugfix: when log_archive was called with the DB_ARCH_REMOVE flag present
authorGregory P. Smith <greg@mad-scientist.com>
Mon, 5 Jun 2006 00:31:01 +0000 (00:31 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Mon, 5 Jun 2006 00:31:01 +0000 (00:31 +0000)
in BerkeleyDB >= 4.2 it tried to construct a list out of an uninitialized
char **log_list.

feature: export the DB_ARCH_REMOVE flag by name in the module on BerkeleyDB >= 4.2.

Lib/bsddb/test/test_basics.py
Modules/_bsddb.c

index 24c40388708b0492abfa521505912648a794b558..92cad0666ea8c1a4dee0365c4763f0fd80c1e7b1 100644 (file)
@@ -665,6 +665,9 @@ class BasicTransactionTestCase(BasicTestCase):
         for log in logs:
             if verbose:
                 print 'log file: ' + log
+        if db.version >= (4,2):
+            logs = self.env.log_archive(db.DB_ARCH_REMOVE)
+            assert not logs
 
         self.txn = self.env.txn_begin()
 
index c8edaa0609c492e68089d36465c9ca4f63a787d2..2df73febc2df8887ff58b2f850a1648bf8122600 100644 (file)
@@ -4371,13 +4371,17 @@ DBEnv_log_archive(DBEnvObject* self, PyObject* args)
 {
     int flags=0;
     int err;
-    char **log_list_start, **log_list;
+    char **log_list = NULL;
     PyObject* list;
     PyObject* item = NULL;
 
     if (!PyArg_ParseTuple(args, "|i:log_archive", &flags))
         return NULL;
 
+    list = PyList_New(0);
+    if (list == NULL)
+        return NULL;
+
     CHECK_ENV_NOT_CLOSED(self);
     MYDB_BEGIN_ALLOW_THREADS;
 #if (DBVER >= 40)
@@ -4390,11 +4394,8 @@ DBEnv_log_archive(DBEnvObject* self, PyObject* args)
     MYDB_END_ALLOW_THREADS;
     RETURN_IF_ERR();
 
-    list = PyList_New(0);
-    if (list == NULL)
-        return NULL;
-
     if (log_list) {
+        char **log_list_start;
         for (log_list_start = log_list; *log_list != NULL; ++log_list) {
             item = PyString_FromString (*log_list);
             if (item == NULL) {
@@ -5247,6 +5248,9 @@ DL_EXPORT(void) init_bsddb(void)
     ADD_INT(d, DB_ARCH_ABS);
     ADD_INT(d, DB_ARCH_DATA);
     ADD_INT(d, DB_ARCH_LOG);
+#if (DBVER >= 42)
+    ADD_INT(d, DB_ARCH_REMOVE);
+#endif
 
     ADD_INT(d, DB_BTREE);
     ADD_INT(d, DB_HASH);