Date: Mon, 4 Jan 2010 23:39:46 -0500 From: Alexander Kabaev <kabaev@gmail.com> To: David Xu <davidxu@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r201547 - head/lib/libc/gen Message-ID: <20100104233946.6d8bfa37@kan.dnsalias.net> In-Reply-To: <201001050339.o053dV1j075171@svn.freebsd.org> References: <201001050339.o053dV1j075171@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --] 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@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 [-- Attachment #2 --] -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.13 (FreeBSD) iD8DBQFLQsKWQ6z1jMm+XZYRArwyAJwOc/6JtClBjYxuHbGvwayJtQ5KpwCfQStd sgXlj8pE9DNj3cwia4tZsws= =JzuK -----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100104233946.6d8bfa37>
