I spent the last week up to my elbows in buffering.c. It's not quite ready yet, but it's looking good; the patch is at http://q3q.us/buffer2.patch . Here's what's going on:
- I decided the reservation of independent buffer space was just too
cruel to live and scratched it.
- The code here instead keeps the list of memory_handles sorted and
inserts in order; this allows the buffering system to determine when
it would overwrite the next handle.
- A new memory_handle is no longer necessarily created at the end of
the buffer - if there's "room" for its whole contents between two
other handles it is placed there
- The goal is to have a single file consist of a chain of
memory_handles dynamically created and destroyed as the buffering
system reads the disk. Because these handles can be inserted in the
free space between other handles, this will lead to efficient usage
of the whole buffer's space even while multiple different things are
being buffered simultaneously.
I've been turning up little gems in the current buffering
implementation like:
copy_mp3entry((struct mp3entry *)h->data, (const struct mp3entry *)src);
For your reference, h->data is a size_t. This code must never have
been run, not even once. The corrected line reads:
copy_mp3entry((struct mp3entry *)(buffer+h->data),
(const struct mp3entry *)src);
This is probably the most difficult part of the project, so taking
another week on it won't kill me. Still have half the project time
left :-). Slow and steady, eh?
Bryan Jacobs
signature.asc
Description: PGP signature
