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>
index | next in thread | previous in thread | raw e-mail
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
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.9911271507450.42278-100000>
