Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jun 1998 18:22:43 -0400
From:      Brian Cully <shmit@kublai.com>
To:        John Birrell <jb@cimlogic.com.au>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: Weirdness with pthreads in -current
Message-ID:  <19980624182243.37940@kublai.com>
In-Reply-To: <199806242106.HAA04775@cimlogic.com.au>; from John Birrell on Thu, Jun 25, 1998 at 07:06:56AM %2B1000
References:  <19980624031814.19037@kublai.com> <199806242106.HAA04775@cimlogic.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jun 25, 1998 at 07:06:56AM +1000, John Birrell wrote:
> [ This should have been sent to -current, not -hackers ]

I sent it to hackers because I didn't know if it was a real problem or
just me misunderstanding something. :-)

> Brian Cully wrote:
> POSIX says that pthread_join() returns zero if no error, otherwise an
> error number is returned. It doesn't touch errno because it is not supposed
> to. 8-)

Yah, I re-read the man pages and realized I jumped to conclusions because
the errors began with E. :-)

> > This is -current from 28-May-1998, BTW.
> 
> Do you have a small test program that exhibits this problem?

Yep, you can find it below.

What's strange is that if I remove the `return NULL' statement in
thread_func() I always get ESRCH, but with it there I only get ESRCH when
the sleep() call exists.

This may (and probably is) some drain-bamage on my part, but the
behaviour is certainly weird enough that I think that there's some kind
of bug somewhere in the thread code. :-)

[SNIP]
#include <pthread.h>
#include <stdio.h>

void *
thread_func(void *arg)
{
	printf("\tIn thread_func.\n");
	sleep(2);
	printf("\tLeaving thread_func.\n");
	pthread_exit(NULL);
	return NULL;
}

int
main(int argc, char *argv[])
{
	int rc;
	pthread_t thread_id;

	printf("Creating thread.\n");
	rc = pthread_create(&thread_id, NULL, thread_func, NULL);
	if (rc) {
		fprintf(stderr, "Error: couldn't create thread: %s.\n",
			strerror(rc));
		return 1;
	}

	printf("Joining thread.\n");
	rc = pthread_join(thread_id, NULL);
	if (rc) {
		fprintf(stderr, "Error: couldn't join with thread: %s.\n",
			strerror(rc));
		return 1;
	}

	return 0;
}
[SNIP]

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?19980624182243.37940>