fixes berkeley db calls
authorPeng Wu <alexepico@gmail.com>
Tue, 18 Jun 2013 02:53:04 +0000 (10:53 +0800)
committerPeng Wu <alexepico@gmail.com>
Tue, 18 Jun 2013 03:04:29 +0000 (11:04 +0800)
src/storage/flexible_ngram.h
src/storage/ngram.cpp

index db4436f..6cff7ff 100644 (file)
@@ -541,6 +541,7 @@ public:
      */
     bool get_all_items(GArray * items){
         g_array_set_size(items, 0);
+
         if ( !m_db )
             return false;
 
@@ -551,6 +552,9 @@ public:
         /* Get a cursor */
         m_db->cursor(m_db, NULL, &cursorp, 0);
 
+        if (NULL == cursorp)
+            return false;
+
         /* Initialize our DBTs. */
         memset(&key, 0, sizeof(DBT));
         memset(&data, 0, sizeof(DBT));
@@ -567,6 +571,10 @@ public:
 
         if ( ret != DB_NOTFOUND ){
             fprintf(stderr, "training db error, exit!");
+
+            if (cursorp != NULL)
+                cursorp->c_close(cursorp);
+
             exit(EIO);
         }
 
index 7509b17..3964388 100644 (file)
@@ -287,6 +287,9 @@ bool Bigram::load_db(const char * dbfile){
     ret = db_create(&tmp_db, NULL, 0);
     assert(ret == 0);
 
+    if (NULL == tmp_db)
+        return false;
+
     ret = tmp_db->open(tmp_db, NULL, dbfile, NULL,
                        DB_HASH, DB_RDONLY, 0600);
     if ( ret != 0 )
@@ -294,9 +297,13 @@ bool Bigram::load_db(const char * dbfile){
 
     DBC * cursorp = NULL;
     DBT key, data;
+
     /* Get a cursor */
     tmp_db->cursor(tmp_db, NULL, &cursorp, 0);
 
+    if (NULL == cursorp)
+        return false;
+
     /* Initialize our DBTs. */
     memset(&key, 0, sizeof(DBT));
     memset(&data, 0, sizeof(DBT));
@@ -328,6 +335,9 @@ bool Bigram::save_db(const char * dbfile){
     ret = db_create(&tmp_db, NULL, 0);
     assert(ret == 0);
 
+    if (NULL == tmp_db)
+        return false;
+
     ret = tmp_db->open(tmp_db, NULL, dbfile, NULL,
                        DB_HASH, DB_CREATE, 0600);
     if ( ret != 0 )
@@ -338,6 +348,9 @@ bool Bigram::save_db(const char * dbfile){
     /* Get a cursor */
     m_db->cursor(m_db, NULL, &cursorp, 0);
 
+    if (NULL == cursorp)
+        return false;
+
     /* Initialize our DBTs. */
     memset(&key, 0, sizeof(DBT));
     memset(&data, 0, sizeof(DBT));
@@ -444,7 +457,10 @@ bool Bigram::get_all_items(GArray * items){
     DBT key, data;
     int ret;
     /* Get a cursor */
-    m_db->cursor(m_db, NULL, &cursorp, 0); 
+    m_db->cursor(m_db, NULL, &cursorp, 0);
+
+    if (NULL == cursorp)
+        return false;
 
     /* Initialize our DBTs. */
     memset(&key, 0, sizeof(DBT));