Mailing-List: contact cygwin-help@sourceware.cygnus.com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe@sources.redhat.com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin@sources.redhat.com>
List-Help: <mailto:cygwin-help@sources.redhat.com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner@sources.redhat.com
Delivered-To: mailing list cygwin@sources.redhat.com
Date: Thu, 30 Aug 2001 09:46:00 +0200
From: Frederic Devernay <Frederic.Devernay@sophia.inria.fr>
To: cygwin@cygwin.com
Cc: Olivier Bantiche <Olivier.Bantiche@sophia.inria.fr>,
        Frederic Devernay <Frederic.Devernay@sophia.inria.fr>
Subject: possible pthread_mutex_init bug: reads uninitialized memory
Message-ID: <20010830094600.A9594@perf.inria.fr>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.4i

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/

