On Fri, 21 May 2004, Stas Bekman wrote:

> I understand all that, but I guess I fail to pass the point across. It is not
> a problem that I encounter in my code. On the contrary I'm writing tests that
> exercise, both valid and invalid ways the API can be called. API that hangs
> when called in invalid way is a problem. Don't you think?
>
>    APR_BUCKET_INSERT_BEFORE(fb, db);

The thing is, it would not be this macro that hangs.  All this macro can
do is segfault (if one of the pointers is null, meaning the brigade was
previously corrupted), or do what it's supposed to do (though in doing so
it could potentially corrupt some other brigade, which is what happens
here -- if the bucket being inserted is still in a brigade, as db is, then
that brigade will be corrupted by this operation).  The only way to detect
that such corruption will occur is to check the entire ring...  that's a
linear time checking operation tacked on to a constant time insertion
operation... not acceptable.  :)  However, if you compile with bucket
debugging turned on, those validity checks WILL be done.

--Cliff

Reply via email to