}
case MutexErr: {
MutexErrInfo* p = (MutexErrInfo*)(VG_(get_error_extra)(e));
+ tl_assert(p);
VG_(message)(Vg_UserMsg,
"%s / mutex 0x%lx (recursion count %d, owner %d)",
VG_(get_error_string)(e),
- p ? p->mutex : 0,
- p ? p->recursion_count : 0,
- p ? p->owner : DRD_INVALID_THREADID);
+ p->mutex,
+ p->recursion_count,
+ p->owner);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
break;
}
VG_(pp_ExeContext)(VG_(get_error_where)(e));
break;
}
+ case GenericErr: {
+ //GenericErrInfo* gei =(GenericErrInfo*)(VG_(get_error_extra)(e));
+ VG_(message)(Vg_UserMsg, "%s", VG_(get_error_string)(e));
+ VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ break;
+ }
default:
VG_(message)(Vg_UserMsg,
"%s",
return sizeof(CondRaceErrInfo);
case CondErr:
return sizeof(CondErrInfo);
+ case GenericErr:
+ return sizeof(GenericErrInfo);
default:
tl_assert(False);
break;
DataRaceErr = 1,
MutexErr = 2,
CondRaceErr = 3,
- CondErr = 4,
+ CondErr = 4,
+ GenericErr = 5,
} DrdErrorKind;
/* The classification of a faulting address. */
Addr cond;
} CondErrInfo;
+typedef struct {
+} GenericErrInfo;
+
void describe_addr(Addr const a, SizeT const len, AddrInfo* const ai);
Char* describe_addr_text(Addr const a, SizeT const len, AddrInfo* const ai,
Char* const buf, UInt const n_buf);
{
if (drd_is_any_suppressed(mutex, mutex + size))
{
- MutexErrInfo MEI = { 0, 0, 0 };
+ GenericErrInfo GEI;
VG_(maybe_record_error)(VG_(get_running_tid)(),
- MutexErr,
+ GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
"Not a mutex",
- &MEI);
+ &GEI);
return 0;
}
mutex_initialize(&s_mutex[i], mutex, size, mutex_type);
if (p == 0)
{
- MutexErrInfo MEI = { 0, 0, 0 };
+ GenericErrInfo GEI;
VG_(maybe_record_error)(VG_(get_running_tid)(),
- MutexErr,
+ GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
"Not a mutex",
- &MEI);
+ &GEI);
return 0;
}
if (p == 0 || p->owner == DRD_INVALID_THREADID)
{
- MutexErrInfo MEI = { 0, 0, 0 };
+ GenericErrInfo GEI;
VG_(maybe_record_error)(vg_tid,
- MutexErr,
+ GenericErr,
VG_(get_IP)(vg_tid),
"Not a mutex",
- &MEI);
+ &GEI);
return 0;
}
--- /dev/null
+ERROR SUMMARY: 4 errors from 4 contexts
+++ /dev/null
-prog: tc07_hbl1
+++ /dev/null
-prog: tc08_hbl2
-stderr_filter: filter_error_summary
by 0x........: clone (in /...libc...)
Thread 1:
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
by 0x........: nearly_main (tc09_bad_unlock.c:41)
by 0x........: main (tc09_bad_unlock.c:49)
by 0x........: clone (in /...libc...)
Thread 1:
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
by 0x........: nearly_main (tc09_bad_unlock.c:41)
by 0x........: main (tc09_bad_unlock.c:50)
at 0x........: pthread_mutex_destroy (drd_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
---------------- pthread_cond_wait et al ----------------
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
at 0x........: pthread_mutex_destroy (drd_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
---------------- pthread_cond_wait et al ----------------
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:69)
by 0x........: clone (in /...libc...)
Thread 1:
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:69)
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:69)
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:72)
by 0x........: clone (in /...libc...)
Thread 1:
-Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+Not a mutex
at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:75)