[PATCH v2] Destructor support for C++11 thread_local variables - abilist entries

Richard Henderson rth@twiddle.net
Fri Oct 12 18:26:00 GMT 2012


On 10/12/2012 05:28 AM, Siddhesh Poyarekar wrote:
> +__call_tls_dtors (void)
> +{
> +  struct dtor_list *l = tls_dtor_list;
> +
> +  while (l)
> +    {
> +      struct dtor_list *cur = l;
> +
> +      l = l->next;
> +      cur->func (cur->obj);
> +      free (cur);
> +    }
> +  tls_dtor_list = NULL;
> +}

I don't like leaving a stale pointer like this.  And this ignores the 
possibility of new items being added to the list during the list
destruction process.

Shall we write instead

  while (tls_dtor_list)
    {
      struct dtor_list *cur = tls_dtor_list;
      tls_dtor_list = cur->next;
      cur->func (cur->obj);
      free (cur);
    }

This is much closer to how __run_exit_handlers is structured.


r~



More information about the Libc-alpha mailing list