Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 27 Nov 1999 15:11:36 -0800 (PST)
From:      FengYue <fengyue@bluerose.windmoon.nu>
To:        hackers@FreeBSD.ORG
Subject:   Re: PThreads and Sockets
Message-ID:  <Pine.BSF.4.10.9911271507450.42278-100000@bluerose.windmoon.nu>
In-Reply-To: <19991126173228.A2608@spirit.jaded.net>

next in thread | previous in thread | raw e-mail | index | archive | help

On Fri, 26 Nov 1999, Dan Moschuk wrote:

> 
> | int sd2;
> | if((sd2=accept(sd, (struct sockaddr*)&cad, &alen)) > 0) {
> | 	pthread_create(&thread1, pthread_attr_default,
> | 		       serverstart, &sd2);
> | }
> | 
> | Then the serverstart function:
> | 
> | void *serverstart(void *ptr)
> | {
> | 	int *sd2;
> | 	sd2 = (int*)ptr;
> | 
> |         dowhatever(sd2);
> | }
> |
> | Any ideas as to what I'm doing wrong? Also, thanks for your help.
> | 
> | Rob
> 
> Try this.
> 
> void *serverstart(void *ptr)
> {
> 	int sd2;
> 
> 	sd2 = *((int *) ptr);
> 	...
> }

There is a race condition.  You're passing sd2's address to serverstart()
and inside serverstart() you def' the pointer.  What if
"sd2=accept(sd, (struct sockaddr*)&cad, &alen)" gets
executed before your previous serverstart() finishs "sd2 = *((int*)ptr)"?

btw, IMHO, creating threads per connection is a very bad design.



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.9911271507450.42278-100000>