obj_map(new HashTable<const void *, action_list_t, uintptr_t, 4>()),
lock_waiters_map(new HashTable<const void *, action_list_t, uintptr_t, 4>()),
obj_thrd_map(new HashTable<void *, std::vector<action_list_t>, uintptr_t, 4 >()),
- promises(new std::vector<Promise *>()),
- futurevalues(new std::vector<struct PendingFutureValue>()),
- pending_rel_seqs(new std::vector<struct release_seq *>()),
- thrd_last_action(new std::vector<ModelAction *>(1)),
+ promises(new std::vector< Promise *, SnapshotAlloc<Promise *> >()),
+ futurevalues(new std::vector< struct PendingFutureValue, SnapshotAlloc<struct PendingFutureValue> >()),
+ pending_rel_seqs(new std::vector< struct release_seq *, SnapshotAlloc<struct release_seq *> >()),
+ thrd_last_action(new std::vector< ModelAction *, SnapshotAlloc<ModelAction *> >(1)),
node_stack(new NodeStack()),
mo_graph(new CycleGraph()),
failed_promise(false),
bool ModelChecker::resolve_release_sequences(void *location, work_queue_t *work_queue)
{
bool updated = false;
- std::vector<struct release_seq *>::iterator it = pending_rel_seqs->begin();
+ std::vector< struct release_seq *, SnapshotAlloc<struct release_seq *> >::iterator it = pending_rel_seqs->begin();
while (it != pending_rel_seqs->end()) {
struct release_seq *pending = *it;
ModelAction *act = pending->acquire;
HashTable<const void *, action_list_t, uintptr_t, 4> *lock_waiters_map;
HashTable<void *, std::vector<action_list_t>, uintptr_t, 4 > *obj_thrd_map;
- std::vector<Promise *> *promises;
- std::vector<struct PendingFutureValue> *futurevalues;
+ std::vector< Promise *, SnapshotAlloc<Promise *> > *promises;
+ std::vector< struct PendingFutureValue, SnapshotAlloc<struct PendingFutureValue> > *futurevalues;
/**
* List of pending release sequences. Release sequences might be
* are established. Each entry in the list may only be partially
* filled, depending on its pending status.
*/
- std::vector<struct release_seq *> *pending_rel_seqs;
+ std::vector< struct release_seq *, SnapshotAlloc<struct release_seq *> > *pending_rel_seqs;
- std::vector<ModelAction *> *thrd_last_action;
+ std::vector< ModelAction *, SnapshotAlloc<ModelAction *> > *thrd_last_action;
NodeStack *node_stack;
/** Private data members that should be snapshotted. They are grouped