X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=promise.cc;h=90591eb60249693d773c534dfbaedf96c4117521;hb=dbb1bb205f35f076cf2d82ec443415d858b22e2f;hp=259ba058ddba82bbd8eaeb0b8559a24144cd087e;hpb=c832cb55af09e735821ae3463bc37c29d3fa27c8;p=model-checker.git diff --git a/promise.cc b/promise.cc index 259ba05..90591eb 100644 --- a/promise.cc +++ b/promise.cc @@ -4,18 +4,29 @@ bool Promise::increment_threads(thread_id_t tid) { unsigned int id=id_to_int(tid); - if (id>=synced_thread.size()) { + if ( id >= synced_thread.size() ) { synced_thread.resize(id+1, false); } if (synced_thread[id]) return false; synced_thread[id]=true; - bool * enabled=model->get_scheduler()->get_enabled(); + unsigned int sync_size=synced_thread.size(); + int promise_tid=id_to_int(read->get_tid()); + for(unsigned int i=1;iget_num_threads();i++) { + if ((i >= sync_size || !synced_thread[i]) && ( (int)i != promise_tid ) && model->is_enabled(int_to_id(i))) { + return false; + } + } + return true; +} - for(unsigned int i=0;iget_num_threads();i++) { - if (!synced_thread[id] && enabled[id]) +bool Promise::check_promise() { + unsigned int sync_size=synced_thread.size(); + for(unsigned int i=1;iget_num_threads();i++) { + if ((i >= sync_size || !synced_thread[i]) && model->is_enabled(int_to_id(i))) { return false; + } } return true; }