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