* Combine all vector clocks that were stored because of happens-before
* annotations with the vector clock of the current thread.
*/
- DRD_(vc_copy)(&old_vc, &DRD_(g_threadinfo)[tid].last->vc);
+ DRD_(vc_copy)(&old_vc, DRD_(thread_get_vc)(tid));
VG_(OSetGen_ResetIter)(p->oset);
for ( ; (q = VG_(OSetGen_Next)(p->oset)) != 0; )
{
if (q->tid != tid)
{
tl_assert(q->sg);
- DRD_(vc_combine)(&DRD_(g_threadinfo)[tid].last->vc, &q->sg->vc);
+ DRD_(vc_combine)(DRD_(thread_get_vc)(tid), &q->sg->vc);
}
}
DRD_(thread_update_conflict_set)(tid, &old_vc);
struct rwlock_thread_info* q;
VectorClock old_vc;
- DRD_(vc_copy)(&old_vc, &DRD_(g_threadinfo)[tid].last->vc);
+ DRD_(vc_copy)(&old_vc, DRD_(thread_get_vc)(tid));
VG_(OSetGen_ResetIter)(p->thread_info);
for ( ; (q = VG_(OSetGen_Next)(p->thread_info)) != 0; )
{
{
if (q->latest_wrlocked_segment)
{
- DRD_(vc_combine)(&DRD_(g_threadinfo)[tid].last->vc,
+ DRD_(vc_combine)(DRD_(thread_get_vc)(tid),
&q->latest_wrlocked_segment->vc);
}
if (readers_too && q->latest_rdlocked_segment)
{
- DRD_(vc_combine)(&DRD_(g_threadinfo)[tid].last->vc,
+ DRD_(vc_combine)(DRD_(thread_get_vc)(tid),
&q->latest_rdlocked_segment->vc);
}
}
if (DRD_(sg_get_trace)())
{
char *str1, *str2;
- str1 = DRD_(vc_aprint)(&DRD_(g_threadinfo)[joiner].last->vc);
- str2 = DRD_(vc_aprint)(&DRD_(g_threadinfo)[joinee].last->vc);
+ str1 = DRD_(vc_aprint)(DRD_(thread_get_vc)(joiner));
+ str2 = DRD_(vc_aprint)(DRD_(thread_get_vc)(joinee));
VG_(message)(Vg_DebugMsg, "Before join: joiner %s, joinee %s\n",
str1, str2);
VG_(free)(str1);
{
VectorClock old_vc;
- DRD_(vc_copy)(&old_vc, &DRD_(g_threadinfo)[joiner].last->vc);
- DRD_(vc_combine)(&DRD_(g_threadinfo)[joiner].last->vc,
- &DRD_(g_threadinfo)[joinee].last->vc);
+ DRD_(vc_copy)(&old_vc, DRD_(thread_get_vc)(joiner));
+ DRD_(vc_combine)(DRD_(thread_get_vc)(joiner),
+ DRD_(thread_get_vc)(joinee));
DRD_(thread_update_conflict_set)(joiner, &old_vc);
s_update_conflict_set_join_count++;
DRD_(vc_cleanup)(&old_vc);
}
else
{
- DRD_(vc_combine)(&DRD_(g_threadinfo)[joiner].last->vc,
- &DRD_(g_threadinfo)[joinee].last->vc);
+ DRD_(vc_combine)(DRD_(thread_get_vc)(joiner),
+ DRD_(thread_get_vc)(joinee));
}
thread_discard_ordered_segments();
if (DRD_(sg_get_trace)())
{
char* str;
- str = DRD_(vc_aprint)(&DRD_(g_threadinfo)[joiner].last->vc);
+ str = DRD_(vc_aprint)(DRD_(thread_get_vc)(joiner));
VG_(message)(Vg_DebugMsg, "After join: %s\n", str);
VG_(free)(str);
}
{
VectorClock old_vc;
- DRD_(vc_copy)(&old_vc, &DRD_(g_threadinfo)[tid].last->vc);
- DRD_(vc_combine)(&DRD_(g_threadinfo)[tid].last->vc, vc);
+ DRD_(vc_copy)(&old_vc, DRD_(thread_get_vc)(tid));
+ DRD_(vc_combine)(DRD_(thread_get_vc)(tid), vc);
if (DRD_(sg_get_trace)())
{
char *str1, *str2;
str1 = DRD_(vc_aprint)(&old_vc);
- str2 = DRD_(vc_aprint)(&DRD_(g_threadinfo)[tid].last->vc);
+ str2 = DRD_(vc_aprint)(DRD_(thread_get_vc)(tid));
VG_(message)(Vg_DebugMsg, "thread %d: vc %s -> %s\n", tid, str1, str2);
VG_(free)(str1);
VG_(free)(str2);
}
else
{
- tl_assert(DRD_(vc_lte)(vc, &DRD_(g_threadinfo)[tid].last->vc));
+ tl_assert(DRD_(vc_lte)(vc, DRD_(thread_get_vc)(tid)));
}
}
{
char* str;
- str = DRD_(vc_aprint)(&DRD_(g_threadinfo)[tid].last->vc);
+ str = DRD_(vc_aprint)(DRD_(thread_get_vc)(tid));
VG_(message)(Vg_DebugMsg,
"computing conflict set for thread %d with vc %s\n",
tid, str);
{
char* str;
- str = DRD_(vc_aprint)(&DRD_(g_threadinfo)[tid].last->vc);
+ str = DRD_(vc_aprint)(DRD_(thread_get_vc)(tid));
VG_(message)(Vg_DebugMsg,
"updating conflict set for thread %d with vc %s\n",
tid, str);
VG_(free)(str);
}
- new_vc = &DRD_(g_threadinfo)[tid].last->vc;
+ new_vc = DRD_(thread_get_vc)(tid);
tl_assert(DRD_(vc_lte)(old_vc, new_vc));
DRD_(bm_unmark)(DRD_(g_conflict_set));