Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Jun 2003 11:02:08 -0400
From:      Mike Makonnen <mtm@identd.net>
To:        kern@sibbald.com
Cc:        freebsd-threads@freebsd.org
Subject:   Re: FreeBSD pthread_equal "bug"
Message-ID:  <20030604150209.KLPY11703.pop018.verizon.net@kokeb.ambesa.net>
In-Reply-To: <20030604145838.NUHK3199.pop016.verizon.net@kokeb.ambesa.net>
References:  <1054730325.13630.456.camel@rufus> <20030604135208.LPAG20810.pop015.verizon.net@kokeb.ambesa.net> <1054736114.13630.499.camel@rufus> <20030604145838.NUHK3199.pop016.verizon.net@kokeb.ambesa.net>

next in thread | previous in thread | raw e-mail | index | archive | help
This time with the test program attached. Sorry.

On Wed, 4 Jun 2003 10:58:37 -0400
Mike Makonnen <mtm@identd.net> wrote:

> On 04 Jun 2003 16:15:14 +0200
> Kern Sibbald <kern@sibbald.com> wrote:
> 
> > Hello,
> > 
> > I doubt that this is an accident on Solaris and Linux.
> > They are both excellent implementations (though different)
> > of pthreads, and it is very clear from the values contained
> > that they are not simple memory addresses and are designed
> > to be unique. 
> 
> I am not talking about Solaris and the comparison I am making is specifically
> to the NPTL that I believe is supposed to be shipping with Red Hat now.
> 
> >How they get to their internal structures I
> > don't know and probably it is a few cycles faster than
> > FreeBSD, but it makes pthread_equal() work correctly on
> > their systems.
> > 
> > I can say that their numbers are unique over a very large
> > number of threads, and they repeat perfectly for each
> > execution of the program so it isn't likely to be anything
> > left to chance.
> >
> 
> Can you quote specific code in their Pthreads implementation?
> Without the actual code, this is all just conjecture.  It could be that they
> simply return an index into an array of thread pointers, but that just means
> that it takes a lot longer for the numbers to repeat.
> 
> > As previously mentioned, I'm not convinced this is something urgent,
> > but I am convinced it is a bug.  However, it certainly bit me and
> > took me a bit to figure out.
> 
> Maybe and maybe not, but the test program that follows works "correctly" for
> me. pthread_equal() says the two thread's are not the same.  Which also
> reminds me, I never saw your test program. Can you resend it or put it up on a
> website?
> 
> Cheers.
> -- 
> Mike Makonnen  | GPG-KEY: http://www.identd.net/~mtm/mtm.asc
> mtm@identd.net | D228 1A6F C64E 120A A1C9  A3AA DAE1 E2AF DBCC 68B9
> mtm@FreeBSD.Org| FreeBSD - The Power To Serve
> _______________________________________________
> freebsd-threads@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-threads
> To unsubscribe, send any mail to "freebsd-threads-unsubscribe@freebsd.org"

#include <pthread.h>
#include <stdlib.h>


void *
null(void *arg)
{
	return (NULL);
}

int
main(int argc, char **argv)
{
	pthread_t th1, th2;
	int error;

	error = pthread_create(&th1, NULL, null, NULL);
	if (error != 0)
		abort();

	/* give it a chance to exit */
	sleep(3);

	error = pthread_create(&th2, NULL, null, NULL);
	if (error != 0)
		abort();

	error = pthread_equal(th1, th2);
	if (error)
		printf("They are equal\n");
	else
		printf("They are not equal\n");

	return (0);
}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030604150209.KLPY11703.pop018.verizon.net>