<div dir="ltr">It appears, that under certain circumstances, the arenas_cache can be leaked when shutting down a thread.<div><br></div><div>Specifically, in tsd.c (function tsd_cleanup), this code:</div><div><br></div><div><div><font face="monospace, monospace">#define O(n, t)                                                         \</font></div><div><font face="monospace, monospace">                n##_cleanup(tsd);</font></div><div><font face="monospace, monospace">MALLOC_TSD</font></div><div><font face="monospace, monospace">#undef O</font></div><div><font face="monospace, monospace">                tsd->state = tsd_state_purgatory;</font></div><div><font face="monospace, monospace">                tsd_set(tsd);</font></div><div><font face="monospace, monospace">                break;</font></div></div><div><br></div><div><br></div><div>The cleanup part can wind up creating an arenas_cache, then the tsd_set clears the arenas_cache pointer, and the memory is leaked away.</div><div><br></div><div>I added this call:</div><div><br></div><div><font face="monospace, monospace">                arenas_cache_cleanup(tsd_get());</font></div><div><br></div><div>After the undef and before the tsd->state, and the leak disappears. I'm not sure if there is a better way to fix this though.</div><div><br></div><div>Thanks,</div><div><br></div><div>Christopher</div></div>