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>