Date: Thu, 21 Jan 1999 19:39:28 -0700 From: "Russell L. Carter" <rcarter@pinyon.org> To: freebsd-current@FreeBSD.ORG Subject: Re: Using LinuxThreads Message-ID: <199901220239.TAA06788@psf.Pinyon.ORG>
next in thread | raw e-mail | index | archive | help
dick@tar.com said:
%For kernel threading you just use libc. Whether or not libc generates
% thread safe (re-entrant) calls depends on whether its also linked
%with a library that 1) sets __isthreaded to a non-zero value, 2) has a
%_spinlock() implementationm, and 3) implements the functions
%flockfile, funlockfile, etc. There are also a few macros in header
%files that require _THREAD_SAFE to be defined to be thread safe.
%libc_r could be modified so that is doesn't replace libc, but rather
%is an addon, comparable to the kernel threaded libc case. But, it
%would involve a bit of work.
I thought so at first, but then I had to look at wait4 today and
now I'm not so sure. At least some of libc_r is very closely
tied to the uthread scheduler:
uthread_wait4.c:
#include <errno.h>
#include <sys/wait.h>
#ifdef _THREAD_SAFE
#include <pthread.h>
#include "pthread_private.h"
pid_t
wait4(pid_t pid, int *istat, int options, struct rusage * rusage)
{
pid_t ret;
/* Perform a non-blocking wait4 syscall: */
while ((ret = _thread_sys_wait4(pid, istat, options | WNOHANG,
rusage)) == 0 && (options & WNOHANG) == 0) {
/* Reset the interrupted operation flag: */
_thread_run->interrupted = 0;
/* Schedule the next thread while this one waits: */
_thread_kern_sched_state(PS_WAIT_WAIT, __FILE__, __LINE__);
/* Check if this call was interrupted by a signal: */
if (_thread_run->interrupted) {
errno = EINTR;
ret = -1;
break;
}
}
return (ret);
}
#endif
Russell
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901220239.TAA06788>
