static void register_local_state()

in src/mem/chunkallocator.h [323:364]


    static void register_local_state(
      typename SharedStateHandle::LocalState& local_state,
      ChunkAllocatorLocalState& chunk_alloc_local_state)
    {
      if constexpr (pal_supports<Time, typename SharedStateHandle::Pal>)
      {
        ChunkAllocatorState& state =
          SharedStateHandle::get_chunk_allocator_state(&local_state);

        // Register with the Pal to receive notifications.
        if (!state.register_decay.test_and_set())
        {
          auto timer = alloc_meta_data<
            DecayMemoryTimerObject<typename SharedStateHandle::Pal>,
            SharedStateHandle>(&local_state, &state);
          if (timer != nullptr)
          {
            SharedStateHandle::Pal::register_timer(timer);
          }
          else
          {
            // We failed to register the notification.
            // This is not catarophic, but if we can't allocate this
            // state something else will fail shortly.
            state.register_decay.clear();
          }
        }

        // Add to the list of local states.
        auto* head = state.all_local.load();
        do
        {
          chunk_alloc_local_state.next = head;
        } while (!state.all_local.compare_exchange_strong(
          head, &chunk_alloc_local_state));
      }
      else
      {
        UNUSED(local_state);
        UNUSED(chunk_alloc_local_state);
      }
    }