envoyproxy/envoy

Ability to assert on stat lifetime issues in debug build

Open

#18 047 ouverte le 9 sept. 2021

Voir sur GitHub
 (10 commentaires) (0 réactions) (0 assignés)C++ (5 373 forks)batch import
area/statsenhancementhelp wanted

Métriques du dépôt

Stars
 (27 997 stars)
Métriques de merge PR
 (Merge moyen 8j) (378 PRs mergées en 30 j)

Description

There have been some issues recently with stat references (Counter& et al) outliving their owning Scope. This can lead to use-after-free.

One way to help detect this would be for Counter& and friends to be replaced with a class CounterRef. This class, in a release build, would only contain a Counter&, to avoid a huge increase in memory use. But in debug builds. This object would implement the Counter interface, passing all calls through to the stored Counter&.

In a debug build, this object would also hold a reference to the Scope that created it, and call a new method on the Scope to inform that it is using a stat from that Scope. In Scope's destructor, it would ASSERT if it is still in use by anything.

Hopefully, the macros that create most stats could be modified to work for this, instead of needing to touch all code creates stats.

Guide contributeur