This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
possible pthread_mutex_init bug: reads uninitialized memory
- To: cygwin at cygwin dot com
- Subject: possible pthread_mutex_init bug: reads uninitialized memory
- From: Frederic Devernay <Frederic dot Devernay at sophia dot inria dot fr>
- Date: Thu, 30 Aug 2001 09:46:00 +0200
- Cc: Olivier Bantiche <Olivier dot Bantiche at sophia dot inria dot fr>, Frederic Devernay <Frederic dot Devernay at sophia dot inria dot fr>
Hello,
there are officially two ways to initialize a pthread mutex:
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
or
pthread_mutex_t mut;
pthread_mutex_init(&mut,NULL);
the problem is that the pthread_mutex_init in cygwin reads the of-course
uninitialized memory:
as seen in cygwin-1.3.2-1/winsup/cygwin/thread.cc:
__pthread_mutex_init (pthread_mutex_t * mutex,
const pthread_mutexattr_t * attr)
{
if ((((pshared_mutex *)(mutex))->flags & SYS_BASE == SYS_BASE))
// a pshared mutex
return EBUSY;
...
If found this bug not by declaring a local variable as above, but by allocating
the mutex. the only workaround I found was to memset the memory area before
calling pthread_mutex_init.
I don't know what a pshared_mutex is, but pthread_mutex_init should really
not assume that anything is valid in the given mutex!
Fred
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/