snapshot: read from /proc/self/maps
[c11tester.git] / promise.cc
1 #include "promise.h"
2 #include "model.h"
3 #include "schedule.h"
4
5 bool Promise::increment_threads(thread_id_t tid) { 
6         unsigned int id=id_to_int(tid); 
7         if ( id >= synced_thread.size() ) {
8                 synced_thread.resize(id+1, false);
9         }
10         if (synced_thread[id])
11                 return false;
12         
13         synced_thread[id]=true;
14         enabled_type_t * enabled=model->get_scheduler()->get_enabled();
15         unsigned int sync_size=synced_thread.size();
16         int promise_tid=id_to_int(read->get_tid());
17         for(unsigned int i=1;i<model->get_num_threads();i++) {
18                 if ((i >= sync_size || !synced_thread[i]) && ( (int)i != promise_tid ) && (enabled[i] != THREAD_DISABLED)) {
19                         return false;
20                 }
21         }
22         return true;
23 }
24
25 bool Promise::check_promise() {
26         enabled_type_t * enabled=model->get_scheduler()->get_enabled();
27         unsigned int sync_size=synced_thread.size();
28         for(unsigned int i=1;i<model->get_num_threads();i++) {
29                 if ((i >= sync_size || !synced_thread[i]) && (enabled[i] != THREAD_DISABLED)) {
30                         return false;
31                 }
32         }
33         return true;
34 }