Minor portfolio fixes for some platforms.
authorMorgan Deters <mdeters@cs.nyu.edu>
Tue, 12 Nov 2013 23:13:17 +0000 (18:13 -0500)
committerMorgan Deters <mdeters@cs.nyu.edu>
Tue, 12 Nov 2013 23:13:17 +0000 (18:13 -0500)
src/main/command_executor_portfolio.cpp
src/main/portfolio.cpp

index e58df5699ca2ce38d3a3d7f2013c9c5991ad262b..971aa2131df4c7364d35cb124ec22e17b71e3db0 100644 (file)
@@ -270,7 +270,7 @@ bool CommandExecutorPortfolio::doCommandSingleton(Command* cmd)
     lemmaSharingInit();
 
     /* Portfolio */
-    boost::function<bool()> fns[d_numThreads];
+    boost::function<bool()>* fns = new boost::function<bool()>[d_numThreads];
     for(unsigned i = 0; i < d_numThreads; ++i) {
       fns[i] = boost::bind(smtEngineInvoke,
                            d_smts[i],
@@ -326,6 +326,7 @@ bool CommandExecutorPortfolio::doCommandSingleton(Command* cmd)
     /* cleanup this check sat specific stuff */
     lemmaSharingCleanup();
 
+    delete[] fns;
     return portfolioReturn.second;
   } else if(mode == 2) {
     Command* cmdExported = 
index cf8bba1ba324fe13a94fe5b04c9c9450d2f3bf42..56a05795a65b91b0370ba151f703d0423adb15ee 100644 (file)
@@ -62,8 +62,8 @@ std::pair<int, S> runPortfolio(int numThreads,
                                boost::function<S()> threadFns[],
                                bool optionWaitToJoin) {
   boost::thread thread_driver;
-  boost::thread threads[numThreads];
-  S threads_returnValue[numThreads];
+  boost::thread* threads = new boost::thread[numThreads];
+  S* threads_returnValue = new S[numThreads];
 
   global_flag_done = false;
   global_winner = -1;
@@ -78,8 +78,9 @@ std::pair<int, S> runPortfolio(int numThreads,
     thread_driver = boost::thread(driverFn);
 
   boost::unique_lock<boost::mutex> lock(mutex_main_wait);
-  while(global_flag_done == false)
+  while(global_flag_done == false) {
     condition_var_main_wait.wait(lock);
+  }
 
   if(not driverFn.empty()) {
     thread_driver.interrupt();
@@ -92,7 +93,12 @@ std::pair<int, S> runPortfolio(int numThreads,
     }
   }
 
-  return std::pair<int, S>(global_winner,threads_returnValue[global_winner]);
+  std::pair<int, S> retval(global_winner, threads_returnValue[global_winner]);
+
+  delete[] threads;
+  delete[] threads_returnValue;
+
+  return retval;
 }
 
 // instantiation