svn commit: r201547 - head/lib/libc/gen

Alexander Kabaev kabaev at gmail.com
Tue Jan 5 04:40:06 UTC 2010


Hi,

some quick questions:

FB10_COMPAT_PRIVATE is not used anywhere, why did it get committed?
That aside, use of SYM_DEFAULT is pretty much always wrong.

Also, does libthr really need to export sem_ symbols in 1.2 namespace?
I do not think so, but there might be reasons I am missing, could you
shed some light here?


On Tue, 5 Jan 2010 03:39:31 +0000 (UTC)
David Xu <davidxu at FreeBSD.org> wrote:

> Author: davidxu
> Date: Tue Jan  5 03:39:31 2010
> New Revision: 201547
> URL: http://svn.freebsd.org/changeset/base/201547
> 
> Log:
>   Don't check has_waiters twice, inline some small functions.
>   performance result on my machine:
>   	mutex     Elapsed: 902115 us; per iteration: 90 ns.
>   	semaphore Elapsed: 958780 us; per iteration: 95 ns.
> 
> Modified:
>   head/lib/libc/gen/sem_new.c
> 
> Modified: head/lib/libc/gen/sem_new.c
> ==============================================================================
> --- head/lib/libc/gen/sem_new.c	Tue Jan  5 02:37:59
> 2010	(r201546) +++ head/lib/libc/gen/sem_new.c	Tue Jan
> 5 03:39:31 2010	(r201547) @@ -331,7 +331,7 @@
> _libc_sem_getvalue(sem_t * __restrict se return (0);
>  }
>  
> -static int
> +static __inline int
>  usem_wake(struct _usem *sem)
>  {
>  	if (!sem->_has_waiters)
> @@ -339,7 +339,7 @@ usem_wake(struct _usem *sem)
>  	return _umtx_op(sem, UMTX_OP_SEM_WAKE, 0, NULL, NULL);
>  }
>  
> -static int
> +static __inline int
>  usem_wait(struct _usem *sem, const struct timespec *timeout)
>  {
>  	if (timeout && (timeout->tv_sec < 0 || (timeout->tv_sec == 0
> && @@ -387,7 +387,7 @@ sem_cancel_handler(void *arg)
>          } while (0)
>  
>  
> -static int
> +static __inline int
>  enable_async_cancel(void)
>  {
>  	int old;
> @@ -396,7 +396,7 @@ enable_async_cancel(void)
>  	return (old);
>  }
>  
> -static void
> +static __inline void
>  restore_async_cancel(int val)
>  {
>  	_pthread_setcanceltype(val, NULL);
> @@ -413,7 +413,6 @@ _libc_sem_timedwait(sem_t * __restrict s
>  		return (-1);
>  
>  	retval = 0;
> -	_pthread_testcancel();
>  	for (;;) {
>  		while ((val = sem->_kern._count) > 0) {
>  			if
> (atomic_cmpset_acq_int(&sem->_kern._count, val, val - 1)) @@ -464,7
> +463,5 @@ _libc_sem_post(sem_t *sem) return (-1);
>  
>  	atomic_add_rel_int(&sem->_kern._count, 1);
> -	if (sem->_kern._has_waiters)
> -		return usem_wake(&sem->_kern);
> -	return (0);
> +	return usem_wake(&sem->_kern);
>  }


-- 
Alexander Kabaev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20100105/2f28d7ec/signature.pgp


More information about the svn-src-all mailing list