Everybody knows that valgrind is great.
Well, I was observing a problem in some MySQL code, it looked
like we were writing over some memory that we weren’t meant to be
(as the structure hadn’t been initialised yet). But, seeing as
this was memory that had been allocated off a MEM_ROOT (one of
our memory allocators), valgrind wasn’t gonig to spit out
anything.
This is because this bit of memory had already been allocated and
subsequently “freed”, but then reallocated. The “free”ing
overwrites the memory with garbage (which is what the MEM_ROOT
code does) so that you should see crashes (and a pattern) when
you do something bad.
The traditional way to troubleshoot this in to modify your memory
allocator so that it just calls malloc() and free() all the time
(and valgrind will trap them). We have some code in there to do
that too. However, this requires …
[Read more]