]> granicus.if.org Git - libevent/commit
Revise evbuffer to add last_with_data
authorNick Mathewson <nickm@torproject.org>
Thu, 11 Mar 2010 03:16:14 +0000 (22:16 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 11 Mar 2010 03:16:14 +0000 (22:16 -0500)
commit2a6d2a1e4be261e071f5ddb95be183e172643916
treed0a3416450a8e6cc0816c355f387f55dce82124b
parentc7f1b820fcf3181bccae4dc72dd2d16fbe712887
Revise evbuffer to add last_with_data

This is the first patch in a series to replace previous_to_last with
last_with_data.  Currently, we can only use two partially empty chains
at the end of an evbuffer, so if we have one with 511 bytes free, and
another with 512 bytes free, and we try to do a 1024 byte read, we
can't just stick another chain on the end: we need to reallocate the
last one.  That's stupid and inefficient.

Instead, this patch adds a last_with_data pointer to eventually
replace previous_to_last.  Instead of pointing to the penultimated
chain (if any) as previous_to_last does, last_with_data points to the
last chain that has any data in it, if any.  If all chains are empty,
last_with_data points to the first chain.  If there are no chains,
last_with_data is NULL.

The next step is to start using last_with_data everywhere that we
currently use previous_to_last.  When that's done, we can remove
previous_to_last and the code that maintains it.
buffer.c
evbuffer-internal.h
test/regress_buffer.c