| Summary: | wrong assertion in pthread_mutex_unlock() with lock elision | ||
|---|---|---|---|
| Product: | glibc | Reporter: | Aurelien Jarno <aurelien> |
| Component: | nptl | Assignee: | Not yet assigned to anyone <unassigned> |
| Status: | RESOLVED DUPLICATE | ||
| Severity: | normal | CC: | drepper.fsp |
| Priority: | P2 | Flags: | fweimer:
security-
|
| Version: | unspecified | ||
| Target Milestone: | --- | ||
| URL: | https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=810322 | ||
| Host: | Target: | ||
| Build: | Last reconfirmed: | ||
| Project(s) to access: | ssh public key: | ||
The following code from Andreas Messer fails with an assertion when run on a system with hardware support for lock elision, and with a libc with lock elision enabled. #include <pthread.h> #include <time.h> int main(int argc, char* argv[]) { pthread_mutex_t mutex; pthread_mutexattr_t attr; struct timespec ts; pthread_mutexattr_init( &attr ); pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_ERRORCHECK ); pthread_mutex_init( &mutex, &attr ); clock_gettime( CLOCK_REALTIME, &ts ); ts.tv_sec += 3; pthread_mutex_timedlock( &mutex, &ts ); pthread_mutex_unlock(&mutex); return 0; } It returns the following assertion: a.out: pthread_mutex_unlock.c:87: __pthread_mutex_unlock_usercnt: Assertion `type == PTHREAD_MUTEX_ERRORCHECK_NP' failed. Aborted Patch will follow on the mailing list.