On Dec 5, 2005, at 10:30 AM, Brian Pane wrote:
William A. Rowe, Jr. wrote:
Paul Querna wrote:
Best guess is that we corrupted a bucket brigade by double
freeing it,
or something of that kind. This is definitely a new behavior
since the
async-write code was merged into trunk.
It is odd that we could of double-free'ed something on the
connection
pool. Maybe it isn't a double-free issue at all...
My other thought comes down to the thread locking. Perhaps we are
looking
at an issue of two threads touching the per-thread non-locking
allocator
at once? The reason I suspect is that it -seems- your process
ended up
with a linked block list with a cyclic loop.
That might well be the problem, since the thread that frees the
brigade
isn't necessarily the same thread that allocated it. I'll take a
look at the
code later today.
No, on closer inspection, that's not it. The event MPM creates a new
allocator whenever it creates a new ptrans pool (line 1000). If the
ptrans pool ever gets destroyed, we might have problems, because it's
created as a child of pconf, and I don't think pconf is thread-safe. It
doesn't appear that the ptrans pool is ever destroyed within the code,
though, so pconf thread-safety problems wouldn't explain the error
Paul saw.
Brian