$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r59909 - in sandbox/stm/branches/vbe/libs/stm: example/tx test
From: vicente.botet_at_[hidden]
Date: 2010-02-25 12:18:09
Author: viboes
Date: 2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
New Revision: 59909
URL: http://svn.boost.org/trac/boost/changeset/59909
Log:
Boost.STM/vbe: 
* Adapt examples to language-like macros interface changes
Text files modified: 
   sandbox/stm/branches/vbe/libs/stm/example/tx/bank.cpp            |    62 +++++++++++++++++++++----------         
   sandbox/stm/branches/vbe/libs/stm/example/tx/list.cpp            |    77 +++++++++++++++++++++++++++++---------- 
   sandbox/stm/branches/vbe/libs/stm/example/tx/list_sp.cpp         |    66 ++++++++++++++++++++++-----------       
   sandbox/stm/branches/vbe/libs/stm/example/tx/numeric.cpp         |    46 +++++++++++-----------                  
   sandbox/stm/branches/vbe/libs/stm/test/Jamfile.v2                |     3 +                                       
   sandbox/stm/branches/vbe/libs/stm/test/testLL_latm.h             |     8 +++                                     
   sandbox/stm/branches/vbe/libs/stm/test/testLinkedList.h          |     8 +++                                     
   sandbox/stm/branches/vbe/libs/stm/test/testLinkedListBig.h       |     8 +++                                     
   sandbox/stm/branches/vbe/libs/stm/test/testLinkedListWithLocks.h |     8 +++                                     
   sandbox/stm/branches/vbe/libs/stm/test/testPerson.h              |     8 +++                                     
   sandbox/stm/branches/vbe/libs/stm/test/usingLockTx.h             |     8 +++                                     
   11 files changed, 208 insertions(+), 94 deletions(-)
Modified: sandbox/stm/branches/vbe/libs/stm/example/tx/bank.cpp
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/example/tx/bank.cpp	(original)
+++ sandbox/stm/branches/vbe/libs/stm/example/tx/bank.cpp	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -36,20 +36,21 @@
     }
 
     void Deposit(int amount) {
-        BOOST_STM_TRANSACTION(_) {
+        BOOST_STM_E_TRANSACTION {
             balance_ += amount;
-        } BOOST_STM_RETRY
+        } BOOST_STM_E_END_TRANSACTION;
     }
     int Withdraw(int amount) {
-        BOOST_STM_TRANSACTION(_) {
+        BOOST_STM_E_TRANSACTION {
             balance_ -= amount;
-        } BOOST_STM_RETRY
+        } BOOST_STM_E_END_TRANSACTION;
         return amount;
     }
     int Balance() const {
         BOOST_STM_E_TRANSACTION {
+        std::cout << __FILE__ << "["<<__LINE__<<"] return" << std::endl;\
             BOOST_STM_E_RETURN(balance_);
-        } BOOST_STM_E_END_TRANSACTION
+        } BOOST_STM_E_END_TRANSACTION;
 
         return 0;
     }
@@ -100,16 +101,16 @@
         thread_initializer thi;
         for(int i=10; i>0;--i)
         {
-            BOOST_STM_OUTER_TRANSACTION(_) {
-                int amount=random() % 1000;
-                int acc1=random() % bank_->accounts.size();
-                int acc2=random() % bank_->accounts.size();
-                bank_->accounts[acc1]->Withdraw(amount);
-                bank_->accounts[acc2]->Deposit(amount+1);
-            } BOOST_STM_RETRY
-            catch(...) {
-                cerr << "aborted"<< endl;
+            try {
+                BOOST_STM_OUTER_TRANSACTION(_) {
+                    int amount=random() % 1000;
+                    int acc1=random() % bank_->accounts.size();
+                    int acc2=random() % bank_->accounts.size();
+                    bank_->accounts[acc1]->Withdraw(amount);
+                    bank_->accounts[acc2]->Deposit(amount+1);
+                } BOOST_STM_RETRY
             }
+            CATCH_AND_PRINT_ALL
         }
     }
     tx::pointer<const Bank> bank_;
@@ -133,9 +134,12 @@
 //tx::tx_ptr<BankAccount> a;
 void account_withdraw_thr() {
     thread_initializer thi;
-    BOOST_STM_OUTER_TRANSACTION(_) {
+    try {
+    BOOST_STM_E_TRANSACTION {
         a->Withdraw(10);
-    } BOOST_STM_RETRY
+    } BOOST_STM_E_END_TRANSACTION;
+    } 
+    CATCH_AND_PRINT_ALL
 }
 void account_withdraw() {
     BOOST_STM_OUTER_TRANSACTION(_) {
@@ -145,9 +149,14 @@
 
 void account_deposit_thr() {
     thread_initializer thi;
-    BOOST_STM_OUTER_TRANSACTION(_) {
+    try {
+    //~ BOOST_STM_OUTER_TRANSACTION(_) {
+    BOOST_STM_E_TRANSACTION {
         a->Deposit(10);
-    } BOOST_STM_RETRY
+    } BOOST_STM_E_END_TRANSACTION;
+    //~ } BOOST_STM_RETRY
+    } 
+    CATCH_AND_PRINT_ALL
 }
 void account_deposit() {
     BOOST_STM_OUTER_TRANSACTION(_) {
@@ -166,8 +175,9 @@
         int res = (a->Balance()==10?0:1);
         //BUG assertion "pthread_mutex_lock(&lockable)==0&&"synchro::lock<pthread_mutex_t>"" failed: file "../../../boost/synchro/pthread/mutex.hpp", line 46
         //~ BOOST_STM_TX_DELETE_PTR(_, a.value());
+        std::cout << __FILE__ << "["<<__LINE__<<"] return" << std::endl;
         BOOST_STM_E_RETURN(res);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return 1;
 }
 
@@ -182,8 +192,9 @@
     BOOST_STM_E_TRANSACTION {
         int res = (a->Balance()==-10?0:1);
         //~ BOOST_STM_TX_DELETE_PTR(_, a.value());
+        std::cout << __FILE__ << "["<<__LINE__<<"] return" << std::endl;
         BOOST_STM_E_RETURN(res);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return 1;
 }
 
@@ -204,8 +215,9 @@
     BOOST_STM_E_TRANSACTION {
         int res = (a->Balance()==0?0:1);
         //~ BOOST_STM_TX_DELETE_PTR(_, a.value());
+        std::cout << __FILE__ << "["<<__LINE__<<"] return" << std::endl;
         BOOST_STM_E_RETURN(res);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return 1;
 }
 
@@ -272,7 +284,13 @@
 }
 
 
+void term_hd() {
+    std::cout << "****************** ERROR: "<< __FILE__ << "["<<__LINE__<<"] term_hd"<< std::endl;
+    std::abort();
+}
 int main() {
+    try {
+    std::terminate_handler x = std::set_terminate(term_hd);
     transaction::enable_dynamic_priority_assignment();
     transaction::do_deferred_updating();
     transaction::initialize();
@@ -288,5 +306,7 @@
     res+=test_bank_2();
 
     return res;
+    } 
+    CATCH_AND_PRINT_ALL
 
 }
Modified: sandbox/stm/branches/vbe/libs/stm/example/tx/list.cpp
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/example/tx/list.cpp	(original)
+++ sandbox/stm/branches/vbe/libs/stm/example/tx/list.cpp	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -84,13 +84,13 @@
     std::size_t size() const {
         BOOST_STM_E_TRANSACTION {
             BOOST_STM_E_RETURN(size_);
-        }  BOOST_STM_E_END_TRANSACTION
+        }  BOOST_STM_E_END_TRANSACTION;
         //~ BOOST_STM_TRANSACTION(_) {
             //~ BOOST_STM_RETURN(_, size_);
         //~ }  BOOST_STM_RETRY
         BOOST_STM_E_TRANSACTION {
             BOOST_STM_E_RETURN(size_);
-        }  BOOST_STM_E_END_TRANSACTION
+        }  BOOST_STM_E_END_TRANSACTION;
         //~ BOOST_STM_TRANSACTION(_) {
             //~ BOOST_STM_RETURN(_, size_);
         //~ }  BOOST_STM_RETRY
@@ -100,12 +100,33 @@
     //--------------------------------------------------------------------------
     // find the location to insert the node. if the value already exists, fail
     //--------------------------------------------------------------------------
+    void insert_e(const T& val) {
+        BOOST_STM_TRANSACTION(_) {
+            list_node<T> * prev = head_;
+            list_node<T> * curr = prev->next_;
+            while (curr!=0) {
+                if (curr->value_ == val) BOOST_STM_TX_RETURN_NOTHING(_);
+                //~ if (curr->value_ == val) return;
+                else if (curr->value_ > val) BOOST_STM_BREAK(_);
+                prev = curr;
+                curr = curr->next_;
+            }
+            if (curr==0 || (curr->value_ > val)) {
+                prev->next_=BOOST_STM_TX_NEW_PTR(_,list_node<T>(val, curr));
+                ++size_;
+            }
+        } BOOST_STM_RETRY
+   }
+
     void insert(const T& val) {
         BOOST_STM_E_TRANSACTION {
             list_node<T> * prev = head_;
             list_node<T> * curr = prev->next_;
             while (curr!=0) {
-                if (curr->value_ == val) BOOST_STM_E_RETURN_NOTHING;
+                if (curr->value_ == val) {
+        std::cout << __FILE__ << "["<<__LINE__<<"] return" << std::endl;\
+                    BOOST_STM_E_RETURN_NOTHING;
+                }
                 //~ if (curr->value_ == val) return;
                 else if (curr->value_ > val) break;
                 prev = curr;
@@ -115,10 +136,7 @@
                 prev->next_=BOOST_STM_E_NEW_PTR(list_node<T>(val, curr));
                 ++size_;
             }
-        } BOOST_STM_E_END_TRANSACTION
-        //~ catch (...) {
-            //~ cerr << __LINE__ << " * insert" << endl;
-        //~ }
+        } BOOST_STM_E_END_TRANSACTION;
    }
 
     // search function
@@ -130,7 +148,7 @@
                 curr = curr->next_;
             }
             BOOST_STM_E_RETURN((curr) && (curr->value_ == val));
-        }  BOOST_STM_E_END_TRANSACTION
+        }  BOOST_STM_E_END_TRANSACTION;
         return false;
     }
 
@@ -172,20 +190,20 @@
         cerr << " create size " << l.size() << endl;
     } BOOST_STM_RETRY
     catch (...) {
-        cerr << "aborted" << endl;
+                std::cout << "*** ERROR: "<< __FILE__ << "["<<__LINE__<<"] catch" << std::endl;
     }
 }
 bool check_size(std::size_t val) {
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(l.size()==val);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 bool check_lookup(int val) {
     BOOST_STM_E_TRANSACTION {
         //cerr << " check_lookup " << l.lookup(val) << endl;
         BOOST_STM_E_RETURN(l.lookup(val));
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -198,21 +216,32 @@
 }
 void insert1_th() {
     thread_initializer thi;
-    BOOST_STM_OUTER_TRANSACTION(_) {
-        l.insert(1);
-    }  BOOST_STM_RETRY
+    try {
+        BOOST_STM_E_TRANSACTION {
+            l.insert(1);
+        }  BOOST_STM_E_END_TRANSACTION;
+    } 
+    CATCH_AND_PRINT_ALL
 }
 void insert2_th() {
     thread_initializer thi;
-    BOOST_STM_OUTER_TRANSACTION(_) {
-        l.insert(2);
-    } BOOST_STM_RETRY
+    try {
+    //~ BOOST_STM_OUTER_TRANSACTION(_) {
+        BOOST_STM_E_TRANSACTION {
+            l.insert(2);
+        } BOOST_STM_E_END_TRANSACTION;
+    //~ } BOOST_STM_RETRY
+    } 
+    CATCH_AND_PRINT_ALL
 }
 void insert3_th() {
     thread_initializer thi;
+    try {
     BOOST_STM_OUTER_TRANSACTION(_) {
         l.insert(3);
     } BOOST_STM_RETRY
+    } 
+    CATCH_AND_PRINT_ALL
 }
 
 bool remove(int val) {
@@ -230,7 +259,7 @@
     } BOOST_STM_RETRY
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(n.next_->value_==10);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -240,7 +269,7 @@
     } BOOST_STM_RETRY
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(n.next_->value_==12);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -253,7 +282,7 @@
     } BOOST_STM_RETRY
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(n.next_->value_==10);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -300,7 +329,13 @@
     return fails;
 }
 
+void term_hd() {
+    std::cout << "****************** ERROR: "<< __FILE__ << "["<<__LINE__<<"] term_hd"<< std::endl;
+    std::abort();
+}
 int main() {
+    try {
+    std::terminate_handler x = std::set_terminate(term_hd);
     transaction::enable_dynamic_priority_assignment();
     transaction::do_deferred_updating();
     transaction::initialize();
@@ -308,5 +343,7 @@
 
 
     return test_all();
+    } 
+    CATCH_AND_PRINT_ALL
 
 }
Modified: sandbox/stm/branches/vbe/libs/stm/example/tx/list_sp.cpp
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/example/tx/list_sp.cpp	(original)
+++ sandbox/stm/branches/vbe/libs/stm/example/tx/list_sp.cpp	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -68,7 +68,7 @@
     std::size_t size() const {
         BOOST_STM_E_TRANSACTION {
             BOOST_STM_E_RETURN(size_);
-        }  BOOST_STM_E_END_TRANSACTION
+        }  BOOST_STM_E_END_TRANSACTION;
         return 0;
     }
 
@@ -80,7 +80,10 @@
             read_ptr<list_node<T> > prev(BOOST_STM_CURRENT, head_);
             read_ptr<list_node<T> > curr(BOOST_STM_CURRENT, prev->next_);
             while (curr!=0) {
-                if (curr->value_ == val) return;
+                if (curr->value_ == val)  {
+        std::cout << __FILE__ << "["<<__LINE__<<"] return" << std::endl;\
+                    BOOST_STM_E_RETURN_NOTHING;
+                }
                 else if (curr->value_ > val) break;
                 prev = curr;
                 curr = curr->next_;
@@ -89,7 +92,7 @@
                 make_write_ptr<static_poly>(prev)->next_=BOOST_STM_E_NEW_PTR(list_node<T>(val, curr.get()));
                 ++(make_write_ptr<static_poly>(BOOST_STM_CURRENT, this)->size_);
             }
-        } BOOST_STM_E_END_TRANSACTION
+        } BOOST_STM_E_END_TRANSACTION;
     }
 
     // search function
@@ -101,7 +104,7 @@
                 curr = curr->next_;
             }
             BOOST_STM_E_RETURN((curr) && (curr->value_ == val));
-        }  BOOST_STM_E_END_TRANSACTION
+        }  BOOST_STM_E_END_TRANSACTION;
         return false;
     }
 
@@ -146,20 +149,20 @@
         cout << " create size " << l.size() << endl;
     } BOOST_STM_RETRY
     catch (...) {
-        cout << "aborted" << endl;
+                std::cout << "*** ERROR: "<< __FILE__ << "["<<__LINE__<<"] catch" << std::endl;
     }
 }
 bool check_size(std::size_t val) {
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(l.size()==val);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 bool check_lookup(int val) {
     //BOOST_STM_TRANSACTION(_) {
         return (l.lookup(val));
     //} BOOST_STM_RETRY
-    return false;
+    //~ return false;
 }
 
 bool insert1() {
@@ -172,15 +175,21 @@
 }
 void insert1_th() {
     thread_initializer thi;
-    BOOST_STM_TRANSACTION(_) {
-        l.insert(1);
-    }  BOOST_STM_RETRY
+    try {
+        BOOST_STM_E_TRANSACTION {
+            l.insert(1);
+        }  BOOST_STM_E_END_TRANSACTION;
+    } 
+    CATCH_AND_PRINT_ALL
 }
 void insert2_th() {
     thread_initializer thi;
-    BOOST_STM_TRANSACTION(_) {
-        l.insert(2);
-    } BOOST_STM_RETRY
+    try {
+        BOOST_STM_E_TRANSACTION {
+            l.insert(2);
+        } BOOST_STM_E_END_TRANSACTION;
+    } 
+    CATCH_AND_PRINT_ALL
 }
 
 void remove2() {
@@ -192,18 +201,21 @@
 
 void insert3_th() {
     thread_initializer thi;
-    BOOST_STM_TRANSACTION(_) {
-        l.insert(3);
-    } BOOST_STM_RETRY
+    try {
+        BOOST_STM_E_TRANSACTION {
+            l.insert(3);
+        } BOOST_STM_E_END_TRANSACTION;
+    } 
+    CATCH_AND_PRINT_ALL
 }
 bool n1() {
-    BOOST_STM_TRANSACTION(_) {
+    BOOST_STM_E_TRANSACTION {
         int val = 10;
-        n.next_=BOOST_STM_TX_NEW_PTR(_,test::list_node<int>(val, 0));
-    } BOOST_STM_RETRY
+        n.next_=BOOST_STM_E_NEW_PTR(test::list_node<int>(val, 0));
+    } BOOST_STM_E_END_TRANSACTION;
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN (n.next_->value_==10);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -213,7 +225,7 @@
     } BOOST_STM_RETRY
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN (n.next_->value_==12);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -227,7 +239,7 @@
     } BOOST_STM_RETRY
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN (n.next_->value_==10);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -238,7 +250,7 @@
     fails= fails || !n2();
     fails= fails || !n3();
     fails= fails || !check_size(0);
-    //fails= fails || !insert1();
+    //~ //fails= fails || !insert1();
     thread  th1(insert1_th);
     thread  th2(insert2_th);
     thread  th3(insert2_th);
@@ -261,12 +273,20 @@
     return fails;
 }
 
+void term_hd() {
+    std::cout << "****************** ERROR: "<< __FILE__ << "["<<__LINE__<<"] term_hd"<< std::endl;
+    std::abort();
+}
 int main() {
+    try {
+    std::terminate_handler x = std::set_terminate(term_hd);
     transaction::enable_dynamic_priority_assignment();
     transaction::do_deferred_updating();
     transaction::initialize();
     thread_initializer thi;
 
     return test_all();
+    } 
+    CATCH_AND_PRINT_ALL
 
 }
Modified: sandbox/stm/branches/vbe/libs/stm/example/tx/numeric.cpp
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/example/tx/numeric.cpp	(original)
+++ sandbox/stm/branches/vbe/libs/stm/example/tx/numeric.cpp	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -129,7 +129,7 @@
     }
     BOOST_STM_E_TRANSACTION
         BOOST_STM_E_RETURN(counter<counter2) ;
-    BOOST_STM_E_END_TRANSACTION
+    BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -142,7 +142,7 @@
     try{
         BOOST_STM_TRANSACTION(_) {
             counter=1;
-            throw 1;
+            throw "1";
         } BOOST_STM_END_TRANSACTION(_)
     } catch (...) {}
 
@@ -156,18 +156,18 @@
     reset();
     BOOST_STM_E_TRANSACTION {
         counter=0;
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     try{
         BOOST_STM_E_TRANSACTION {
             counter=1;
-            throw 1;
-        } BOOST_STM_E_END_TRANSACTION
+            throw "1";
+        } BOOST_STM_E_END_TRANSACTION;
     } catch (...) {}
 
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(counter==0);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     return true;
 }
@@ -178,13 +178,13 @@
     reset();
     BOOST_STM_E_TRANSACTION {
         counter=0; counter2=0;
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     try{
         BOOST_STM_TRANSACTION(_) {
             counter=1;
             BOOST_STM_TRANSACTION(__) {
-                throw 1;
+                throw "1";
             } BOOST_STM_END_TRANSACTION(_)
             catch (...){throw;}
             counter=3;
@@ -203,22 +203,22 @@
     reset();
     BOOST_STM_E_TRANSACTION {
         counter=0; counter2=0;
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     try{
         BOOST_STM_E_TRANSACTION {
             counter=1;
             BOOST_STM_E_TRANSACTION {
                 counter=2;
-                throw 1;
-            } BOOST_STM_E_END_TRANSACTION
+                throw "1";
+            } BOOST_STM_E_END_TRANSACTION;
             counter=3;
-        } BOOST_STM_E_END_TRANSACTION
+        } BOOST_STM_E_END_TRANSACTION;
     } catch (...) {}
 
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(counter==0);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     return false;
 }
@@ -229,12 +229,12 @@
         counter=1;
         BOOST_STM_E_TRANSACTION {
             counter2=2;
-        } BOOST_STM_E_END_TRANSACTION
-    } BOOST_STM_E_END_TRANSACTION
+        } BOOST_STM_E_END_TRANSACTION;
+    } BOOST_STM_E_END_TRANSACTION;
 
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN((counter==1) && (counter2==2));
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     return false;
 }
@@ -247,11 +247,11 @@
             counter2=counter;
             continue;
             counter2=3;
-        } BOOST_STM_E_END_TRANSACTION_IN_LOOP
+        } BOOST_STM_E_END_TRANSACTION_IN_LOOP;
     }
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN((counter==1) && (counter2==1) && (counter==counter2)) ;
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
 
     return false;
 }
@@ -264,11 +264,11 @@
             counter2=2;
             break;
             counter2=0;
-        } BOOST_STM_E_END_TRANSACTION_IN_LOOP
+        } BOOST_STM_E_END_TRANSACTION_IN_LOOP;
     }
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(counter<counter2);
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 
@@ -291,7 +291,7 @@
     } BOOST_STM_RETRY
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_RETURN(c==counter2) ;
-    } BOOST_STM_E_END_TRANSACTION
+    } BOOST_STM_E_END_TRANSACTION;
     return false;
 }
 bool test_par() {
@@ -321,8 +321,8 @@
 bool test_twice_e() {
     BOOST_STM_E_TRANSACTION {
         BOOST_STM_E_TRANSACTION {
-        } BOOST_STM_E_END_TRANSACTION
-    } BOOST_STM_E_END_TRANSACTION
+        } BOOST_STM_E_END_TRANSACTION;
+    } BOOST_STM_E_END_TRANSACTION;
 
     return true;
 }
Modified: sandbox/stm/branches/vbe/libs/stm/test/Jamfile.v2
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/Jamfile.v2	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/Jamfile.v2	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -76,6 +76,7 @@
             [ run stm : -bench isolated_int_lock_in_tx -def -threads 4 -inserts 100 -latm tx : : : isolated_int_lock_in_tx_def_tx_t4_i100 ]
 
 
+            ########### deadlock sometimes. 2010/02/22
             [ run stm : -bench isolated_composed_int_lock2 -def -threads 2 -inserts 100 -latm tx : : : isolated_composed_int_lock2_def_tx_t2_i100 ]
 
             [ run stm : -bench irrevocable_int -def -threads 2 -inserts 100 : : : irrevocable_int_def_t2_i100 ]
@@ -134,7 +135,7 @@
             ########### fails with CHECK  all-modes
             #/bin/sh: line 4:  3764 Aborted                 (core dumped) "bin/tx_linear_lock_dir_t2.test/gcc-3.4.4/debug/threading-multi/tx_linear_lock_dir_t2.exe" > "bin/tx_linear_lock_dir_t2.test/gcc-3.4.4/debug/threading-multi/tx_linear_lock_dir_t2.output" 2>&1
             #assertion "res==0" failed: file "../../../boost/synchro/pthread/mutex.hpp", line 40
-            ########### deadlock. without CHECK
+            ########### deadlock. without CHECK 2010/02/22
             [ run stm : -bench tx_linear_lock -dir -threads 2 -inserts 100 -latm full : : : tx_linear_lock_dir_full_t2_i100 ]
             ########### deadlock
             #[ run stm : -bench tx_linear_lock -dir -threads 4 -inserts 100 -latm full : : : tx_linear_lock_dir_full_t4_i100 ]
Modified: sandbox/stm/branches/vbe/libs/stm/test/testLL_latm.h
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/testLL_latm.h	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/testLL_latm.h	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -104,7 +104,13 @@
       head_.value() = T();
    }
 
-   ~LinkedList() { quick_clear(); }
+   ~LinkedList() { 
+       try {
+       quick_clear(); 
+            } catch (...) {
+            BOOST_STM_ERROR;
+        }   
+}
 
    mutex_type* get_list_lock() { return &list_lock_; }
 
Modified: sandbox/stm/branches/vbe/libs/stm/test/testLinkedList.h
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/testLinkedList.h	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/testLinkedList.h	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -95,7 +95,13 @@
 
    LinkedList() { head_.value() = T(); }
 
-   ~LinkedList() { quick_clear(); }
+   ~LinkedList() { 
+        try {
+            quick_clear(); 
+        } catch (...) {
+            BOOST_STM_ERROR;
+        }   
+    }
 
    bool move(list_node<T> const &node1, list_node<T> const &node2)
    {
Modified: sandbox/stm/branches/vbe/libs/stm/test/testLinkedListBig.h
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/testLinkedListBig.h	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/testLinkedListBig.h	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -84,7 +84,13 @@
 
    LinkedList() { head_.value() = T(); }
 
-   ~LinkedList() { quick_clear(); }
+   ~LinkedList() { 
+        try {       
+       quick_clear(); 
+        } catch (...) {
+            BOOST_STM_ERROR;
+        }   
+    }
 
    bool move(list_node<T> const &node1, list_node<T> const &node2)
    {
Modified: sandbox/stm/branches/vbe/libs/stm/test/testLinkedListWithLocks.h
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/testLinkedListWithLocks.h	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/testLinkedListWithLocks.h	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -106,7 +106,13 @@
       head_.value() = T();
    }
 
-   ~LinkedList() { quick_clear(); }
+   ~LinkedList() { 
+        try {       
+       quick_clear(); 
+        } catch (...) {
+            BOOST_STM_ERROR;
+        }   
+    }
 
    mutex_type* get_list_lock() { return &list_lock_; }
 
Modified: sandbox/stm/branches/vbe/libs/stm/test/testPerson.h
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/testPerson.h	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/testPerson.h	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -38,7 +38,13 @@
       resize(kMaxArrSize);
    }
 
-   ~named_array() { delete [] name_; delete [] array_; size_ = 0; }
+   ~named_array() { 
+       try {
+       delete [] name_; delete [] array_; size_ = 0; 
+        } catch (...) {
+            BOOST_STM_ERROR;
+        }   
+    }
 
    char const * const name() const { return name_; }
    T* array() { return array_; }
Modified: sandbox/stm/branches/vbe/libs/stm/test/usingLockTx.h
==============================================================================
--- sandbox/stm/branches/vbe/libs/stm/test/usingLockTx.h	(original)
+++ sandbox/stm/branches/vbe/libs/stm/test/usingLockTx.h	2010-02-25 12:18:07 EST (Thu, 25 Feb 2010)
@@ -109,7 +109,13 @@
       head_.value() = T();
    }
 
-   ~LinkedList() { quick_clear(); }
+   ~LinkedList() { 
+       try {
+       quick_clear(); 
+        } catch (...) {
+            BOOST_STM_ERROR;
+        }   
+    }
 
    mutex_type* get_list_lock() { return &list_lock_; }