On Fri, Feb 20, 2004 at 08:47:43AM +0100, Thomas Pfaff wrote:
>This patch will add support for PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
>PTHREAD_NORMAL_MUTEX_INITIALIZER_NP and
>PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (+ some small bugfixes).
>Attached are also testcases for these initializers.
>The initializer names are borrowed from linux nptl.
>
>These initializers can be used for example to enable thread safe stdio
>in newlib without moving __sinit. I really want to get this fixed.
>
>Thomas
>
>P.S.: I will be on winter vacation next week, no reply during that
>time.
>
>
>2004-02-20  Thomas Pfaff  <[EMAIL PROTECTED]>
>
>       * winsup.api/pthread/mutex8e.c: New testcase.
>       * winsup.api/pthread/mutex8n.c: Ditto.
>       * winsup.api/pthread/mutex8r.c: Ditto.
>
>and
>
>2004-02-20  Thomas Pfaff  <[EMAIL PROTECTED]>
>
>       * include/pthread.h (PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP):
>       New define.
>       (PTHREAD_NORMAL_MUTEX_INITIALIZER_NP): Ditto.
>       (PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP): Ditto.
>       * thread.cc (pthread_mutex::is_good_initializer):
>       Check for all posssible initializers
>       (pthread_mutex::is_good_initializer_or_object): Ditto.
>       (pthread_mutex::is_good_initializer_or_bad_object): Ditto.
>       (verifyable_object_isvalid): Support up to three static
>       initializers.
>       (verifyable_object_isvalid (void const *,long)): Remove.
>       (pthread_cond::is_good_initializer_or_bad_object): Remove
>       unneeded objectState var.
>       (pthread_cond::init): Condition remains unchanged when creation
>       has failed.
>       (pthread_rwlock::is_good_initializer_or_bad_object): Remove
>       unneeded objectState var.
>       (pthread_rwlock::init): Rwlock remains unchanged when creation
>       has failed.
>       (pthread_mutex::init): Remove obsolete comment.
>       Mutex remains unchanged when creation has failed. Add support
>       for new initializers.
>       (pthread_mutex_getprioceiling): Do not create mutex,
>       just return ENOSYS.
>       (pthread_mutex_lock): Simplify.
>       (pthread_mutex_trylock): Remove unneeded local themutex.
>       (pthread_mutex_unlock): Just return EPERM if mutex is not
>       initialized.
>       (pthread_mutex_setprioceiling): Do not create mutex,
>       just return ENOSYS.
>       * thread.h (verifyable_object_isvalid): Support up to three
>       static initializers.
>       (verifyable_object_isvalid (void const *,long)): Remove
>       prototype.
>       (pthread_mutex::init): Add optional initializer to parameter
>       list.

This looks like it simplifies mutex handling a lot.  I haven't investigated
in great detail but since you've provided some test cases, feel free to
check in.

Thanks,
cgf

Reply via email to