objective-c mutex deallocation bug
Ovidiu Predescu
ovidiu@cup.hp.com
Thu Sep 30 23:58:00 GMT 1999
Looks good, I applied it.
Thanks,
Ovidiu
On Tue, 28 Sep 1999 16:44:45 -0700, Chris Ball <cball@fmco.com> wrote:
> I have sent this patch before but it has never appeared
> so here it goes again. If it is easier to give me cvs
> write access I will be happy to check in the change
> myself.
>
>
>
> >Date: Wed, 26 May 1999 17:32:18 -0700
> >To: egcs-bugs@egcs.cygnus.com
> >From: Chris Ball <cball@fmco.com>
> >Subject: objective-c mutex deallocation bug
> >Cc: tmartin@fmco.com, yonas
> >
> >Problem Description:
> > pthread_mutex_destroy() will fail or have undefined
> > behaviour if called with a locked mutex.
> >
> > objc_mutex_deallocate() locks the mutex it is trying
> > to release to establish ownership. This lock is not
> > released before calling __objc_mutex_deallocate() in
> > thr-posix.c.
> >
> > Results: All mutex deallocate/release calls fail
> > under linux when using the posix thread
> > library.
> >
> >
> >Versions Found to have Problem:
> > gcc version egcs-2.90.29 980515 (egcs-1.0.3 release)
> > to
> > gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release)
> >
> > and probably many older releases.
>
> and now in gcc-2.95.1.
>
> >
> >Notes:
> > The behaviour of pthread_mutex_destroy() was checked
> > via man pages for solaris 2.6 and linux using the
> > posix thread library version 0.7.
> >
> >
> >Solution:
> > This patch to thr-posix.c fixes the problem. This
> > releases all locks on the mutex so that in the case
> > of a recursive lock the pthread_mutex_destroy() call
> > will be successful.
> >
> >
> >diff -c output:
>
> diff redone as -c3p...
>
> *** thr-posix.c.old Thu Sep 23 07:19:12 1999
> --- thr-posix.c.new Thu Sep 23 07:19:12 1999
> *************** __objc_mutex_allocate(objc_mutex_t mutex
> *** 145,150 ****
> --- 145,164 ----
> int
> __objc_mutex_deallocate(objc_mutex_t mutex)
> {
> + int count = 1;
> +
> + /*
> + * Posix Threads specifically require that the thread be unlocked for
> + * pthread_mutex_destroy to work.
> + */
> +
> + while ( count )
> + {
> + if (( count = pthread_mutex_unlock((pthread_mutex_t *)mutex->backend))
> + < 0 )
> + return -1;
> + }
> +
> if (pthread_mutex_destroy((pthread_mutex_t *)mutex->backend))
> return -1;
>
>
>
> ChangeLog entry:
>
> Thu Sep 23 07:19:12 1999 Chris Ball <cball@fmco.com>
>
> * thr-posix.c (__objc_mutex_deallocate): made deallocate work.
>
>
> Chris.
>
More information about the Gcc-patches
mailing list