Hello All,
I think we have a major flaw in first_write_block() in MIOBuffer, the
comment and code are the following:
/**
Returns a pointer to the first writable block on the block chain.
Returns NULL if there are not currently any writable blocks on the
block list.
*/
IOBufferBlock *first_write_block()
{
if (_writer) {
if (_writer->next && !_writer->write_avail())
return _writer->next;
ink_assert(!_writer->next || !_writer->next->read_avail());
return _writer;
} else
return NULL;
}
According to this comment it should find the first block with available
space or return NULL, obviously this code only examines two blocks and
(writer and writer->next). I think this code should be more like:
IOBufferBlock *first_write_block()
{
for(IOBufferBlock *cur = _writer; cur != NULL; cur=cur->next) {
if (cur->write_avail())
return cur;
}
return NULL;
}
Does anyone have comments on this? I'm not sure if this change will break
anything, so feedback will be appreciated.
Brian