The 108-based bdbstore shared library module now works with qpidd -s
and passes its self tests.  I've just checked in this change:

        system_test.sh didn't work at all (would seg-fault)
        * lib/BdbMessageStore.cpp: Comment out all attempts to write
        diagnostics to std::cout.  A shared library must not do that,
        and this one would segfault when invoked via qpidd -s ....
        (~BdbMessageStore): Rather than simply writing to std::cout,
        re-throw any close-provoked exception.

Index: lib/BdbMessageStore.cpp
===================================================================
--- lib/BdbMessageStore.cpp     (revision 673)
+++ lib/BdbMessageStore.cpp     (working copy)
@@ -67,10 +67,10 @@

         txn.commit();
     } catch (DbException& e) {
-        std::cout << "Error opening databases: " << e.what() << std::endl;
+        // std::cout << "Error opening databases: " << e.what() << std::endl;
         THROW_STORE_EXCEPTION_2("Error opening databases", e);
     } catch (std::exception& e) {
-        std::cout << "Error opening databases: " << e.what() << std::endl;
+        // std::cout << "Error opening databases: " << e.what() << std::endl;
         throw e;
     }
 }
@@ -85,9 +85,11 @@
         dequeueXidDb.close(0);
         prepareXidDb.close(0);
     } catch (DbException& e) {
-        std::cout << "Error closing databases: " << e.what() << std::endl;
+        // std::cout << "Error closing databases: " << e.what() << std::endl;
+        THROW_STORE_EXCEPTION_2("Error closing databases", e);
     } catch (std::exception& e) {
-        std::cout << "Error closing databases: " << e.what() << std::endl;
+        // std::cout << "Error closing databases: " << e.what() << std::endl;
+        throw e;
     }   
 }

@@ -239,7 +241,7 @@
         //find all the queues into which this message has been enqueued
         if (enqueueMessage(key, msg, index) == 0) {
             //message not referenced anywhere - can delete
-            std::cout << "Deleting unused message " << id << std::endl;
+            // std::cout << "Deleting unused message " << id << std::endl;
             messages->del(0);
         } else {
             if (id > maxMessageId) {
@@ -265,7 +267,7 @@
     for (int status = mappings->get(&msgId, &value, DB_SET); status == 0; 
status = mappings->get(&msgId, &value, DB_NEXT_DUP)) {
         Queue::shared_ptr queue = index[queueId];
         if (!queue) {
-            std::cout << "Missing queue for id: " << queueId << std::endl;
+            // std::cout << "Missing queue for id: " << queueId << std::endl;
             THROW_STORE_EXCEPTION("Missing queue");
         }
         queue->recover(msg);
@@ -605,13 +607,13 @@

 extern "C" MessageStore* create()
 {
-    std::cout << "creating BdbMessageStore" <<std::endl;
+    // std::cout << "creating BdbMessageStore" <<std::endl;
     return new BdbMessageStore();
 }

 extern "C" void destroy(MessageStore* store)
 {
-    std::cout << "destroying BdbMessageStore" <<std::endl;
+    // std::cout << "destroying BdbMessageStore" <<std::endl;
     delete store;
 }

Reply via email to