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 [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to