This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] sem_close: Use __twalk_r



On 03/05/2019 07:06, Florian Weimer wrote:
> (Adhemerval, you said you wanted to rewrite this, but this cleanup patch
> is simple enough so that we can apply it nevertheless, I think.)

LGTM.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

> 
> 2019-05-03  Florian Weimer  <fweimer@redhat.com>
> 
> 	* nptl/sem_close.c (struct walk_closure): Define.
> 	(walker): Adjust for __twalk_r.
> 	(sem_close): Call __twalk_r.
> 
> diff --git a/nptl/sem_close.c b/nptl/sem_close.c
> index b8828cba06..8941f111f9 100644
> --- a/nptl/sem_close.c
> +++ b/nptl/sem_close.c
> @@ -21,21 +21,20 @@
>  #include <sys/mman.h>
>  #include "semaphoreP.h"
>  
> -
> -/* Global variables to parametrize the walk function.  This works
> -   since we always have to use locks.  And we have to use the twalk
> -   function since the entries are not sorted wrt the mapping
> -   address.  */
> -static sem_t *the_sem;
> -static struct inuse_sem *rec;
> +struct walk_closure
> +{
> +  sem_t *the_sem;
> +  struct inuse_sem *rec;
> +};
>  
>  static void
> -walker (const void *inodep, const VISIT which, const int depth)
> +walker (const void *inodep, VISIT which, void *closure0)
>  {
> +  struct walk_closure *closure = closure0;
>    struct inuse_sem *nodep = *(struct inuse_sem **) inodep;
>  
> -  if (nodep->sem == the_sem)
> -    rec = nodep;
> +  if (nodep->sem == closure->the_sem)
> +    closure->rec = nodep;
>  }
>  
>  
> @@ -48,9 +47,12 @@ sem_close (sem_t *sem)
>    lll_lock (__sem_mappings_lock, LLL_PRIVATE);
>  
>    /* Locate the entry for the mapping the caller provided.  */
> -  rec = NULL;
> -  the_sem = sem;
> -  __twalk (__sem_mappings, walker);
> +  struct inuse_sem *rec;
> +  {
> +    struct walk_closure closure = { .the_sem = sem, .rec = NULL };
> +    __twalk_r (__sem_mappings, walker, &closure);
> +    rec = closure.rec;
> +  }
>    if  (rec != NULL)
>      {
>        /* Check the reference counter.  If it is going to be zero, free
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]