Subject: Re: Sempahore on NetBSD work or no ?
To: Jason R Thorpe <thorpej@wasabisystems.com>
From: David Maxwell <david@vex.net>
List: current-users
Date: 01/27/2003 13:07:47
On Sun, Jan 26, 2003 at 10:15:50AM -0800, Jason R Thorpe wrote:
> On Sun, Jan 26, 2003 at 10:39:55AM -0000, Daniel Dias Gonçalves wrote:
> 
>  > I compiled freeradius 0.8.1 in NetBSD 1.6  but when I go run it 
>  > the following error:
>  > 
>  > # radiusd
>  > Sun Jan 26 10:22:39 2003 : Info: Starting - reading 
>  > configuration files ...
>  > /usr/local/lib/rlm_sql-0.8.1.so: Undefined PLT symbol "sem_init" 
>  > (reloc type = 7, symnum = 54)
>  > #
> 
> They're supported in NetBSD-current (1.6M and later), but not 1.6.

I asked Alan DeKok, primary maintainer of Freeradius:

Is sem_init needed - or only for sql backend support perhaps?

and he said to me:

They're used because they're simpler than pthread_mutex's.  They can
(and should) be replaced with pthread_mutex calls.


So, if I understand correctly, Freeradius uses semaphores because 
(a) it needs to implement thread-safe locking in signal handlers
(b) The semaphore API is significantly simpler than pthread_mutex
(c) The Linux pthreads (currently do, but) won't guarantee signal
	delivery to the right thread.

I believe our pthreads does guarantee signal delivery to the right
thread (over and above the POSIX spec, which doesn't require that) - and
Alan says that if that's the case, he can #ifndef __NetBSD__ all of the
semaphore code in the Freeradius distribution. 

I'll work with him to test that approach under 1.6 (where NetBSD pthreads
don't apply) and -current.

-- 
David Maxwell, david@vex.net|david@maxwell.net -->
If you don't spend energy getting what you want,
	You'll have to spend it dealing with what you get.
					      - Unknown