MINOR: activity/memprofile: offer a function to unregister stale info
There's actually a problem with memprofiles: the pool pointer is stored in ->info but some pools are replaced during startup, such as the trash pool, leaving a dangling pointer there. Let's complete the API with a new function memprof_remove_stale_info() that will remove all stale references to this info pointer. It's also present when USE_MEMORY_PROFILING is not set so as to ease the job on callers. (cherry picked from commit 859341c1ec583c586ef36db0b63cd84f3843bfab) Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
This commit is contained in:
parent
992c3c2b67
commit
3b5cfb28e1
@ -35,6 +35,12 @@ struct sched_activity *sched_activity_entry(struct sched_activity *array, const
|
|||||||
|
|
||||||
#ifdef USE_MEMORY_PROFILING
|
#ifdef USE_MEMORY_PROFILING
|
||||||
struct memprof_stats *memprof_get_bin(const void *ra, enum memprof_method meth);
|
struct memprof_stats *memprof_get_bin(const void *ra, enum memprof_method meth);
|
||||||
|
void memprof_remove_stale_info(const void *info);
|
||||||
|
#else
|
||||||
|
static inline void memprof_remove_stale_info(const void *info)
|
||||||
|
{
|
||||||
|
/* nothing to do */
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _HAPROXY_ACTIVITY_H */
|
#endif /* _HAPROXY_ACTIVITY_H */
|
||||||
|
@ -324,6 +324,23 @@ void free(void *ptr)
|
|||||||
_HA_ATOMIC_ADD(&bin->free_tot, size_before);
|
_HA_ATOMIC_ADD(&bin->free_tot, size_before);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* remove info from entries matching <info>. This needs to be used by callers
|
||||||
|
* of pool_destroy() so that we don't keep a reference to a dead pool. Nothing
|
||||||
|
* is done if <info> is NULL.
|
||||||
|
*/
|
||||||
|
void memprof_remove_stale_info(const void *info)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!info)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < MEMPROF_HASH_BUCKETS; i++) {
|
||||||
|
if (_HA_ATOMIC_LOAD(&memprof_stats[i].info) == info)
|
||||||
|
_HA_ATOMIC_STORE(&memprof_stats[i].info, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif // USE_MEMORY_PROFILING
|
#endif // USE_MEMORY_PROFILING
|
||||||
|
|
||||||
/* Updates the current thread's statistics about stolen CPU time. The unit for
|
/* Updates the current thread's statistics about stolen CPU time. The unit for
|
||||||
|
Loading…
x
Reference in New Issue
Block a user