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

Attachment: signature.asc
Description: PGP signature

Reply via email to