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>