[11/13] nptl: Simplify resetting the in-flight stack in __reclaim_stacks

Message ID ca4a63acda644d583ed3769e4d1f4f833fb3ce5d.1620323953.git.fweimer@redhat.com
State New
Headers show
Series
  • Linux: Move most stack management out of libpthread
Related show

Commit Message

Mark Brown via Libc-alpha May 6, 2021, 6:11 p.m.
stack_list_del overwrites the in-flight stack variable.
---
 nptl/allocatestack.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

-- 
2.30.2

Comments

Mark Brown via Libc-alpha May 9, 2021, 9:42 p.m. | #1
On 5/6/21 2:11 PM, Florian Weimer via Libc-alpha wrote:
> stack_list_del overwrites the in-flight stack variable.


LGTM. Hard to tell if I want to call this is a bug fix or a cleanup
that just happens naturally as part of the refactoring :-)

Tested on x86_64 and i686 without regression.

Tested-by: Carlos O'Donell <carlos@redhat.com>

Reviewed-by: Carlos O'Donell <carlos@redhat.com>


> ---

>  nptl/allocatestack.c | 6 +++---

>  1 file changed, 3 insertions(+), 3 deletions(-)

> 

> diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c

> index 12cd1058d4..076cffd35b 100644

> --- a/nptl/allocatestack.c

> +++ b/nptl/allocatestack.c

> @@ -799,6 +799,8 @@ __reclaim_stacks (void)

>  	  elem->next->prev = elem->prev;

>  	  elem->prev->next = elem->next;

>  	}

> +

> +      GL (dl_in_flight_stack) = 0;

>      }

>  

>    /* Mark all stacks except the still running one as free.  */

> @@ -842,7 +844,7 @@ __reclaim_stacks (void)

>    /* Remove the entry for the current thread to from the cache list

>       and add it to the list of running threads.  Which of the two

>       lists is decided by the user_stack flag.  */

> -  stack_list_del (&self->list);

> +  list_del (&self->list);

>  

>    /* Re-initialize the lists for all the threads.  */

>    INIT_LIST_HEAD (&GL (dl_stack_used));

> @@ -856,8 +858,6 @@ __reclaim_stacks (void)

>    /* There is one thread running.  */

>    __nptl_nthreads = 1;

>  

> -  GL (dl_in_flight_stack) = 0;

> -

>    /* Initialize locks.  */

>    GL (dl_stack_cache_lock) = LLL_LOCK_INITIALIZER;

>    __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;

> 



-- 
Cheers,
Carlos.

Patch

diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 12cd1058d4..076cffd35b 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -799,6 +799,8 @@  __reclaim_stacks (void)
 	  elem->next->prev = elem->prev;
 	  elem->prev->next = elem->next;
 	}
+
+      GL (dl_in_flight_stack) = 0;
     }
 
   /* Mark all stacks except the still running one as free.  */
@@ -842,7 +844,7 @@  __reclaim_stacks (void)
   /* Remove the entry for the current thread to from the cache list
      and add it to the list of running threads.  Which of the two
      lists is decided by the user_stack flag.  */
-  stack_list_del (&self->list);
+  list_del (&self->list);
 
   /* Re-initialize the lists for all the threads.  */
   INIT_LIST_HEAD (&GL (dl_stack_used));
@@ -856,8 +858,6 @@  __reclaim_stacks (void)
   /* There is one thread running.  */
   __nptl_nthreads = 1;
 
-  GL (dl_in_flight_stack) = 0;
-
   /* Initialize locks.  */
   GL (dl_stack_cache_lock) = LLL_LOCK_INITIALIZER;
   __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;