| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Again, a data type which can be forward-declared.
|
|
|
|
| |
Pass const songvec pointers to songvec_find() and songvec_for_each().
|
|
|
|
|
|
|
|
|
|
| |
Only one lock is used for all songvec traversals since
they're rarely changed. Also, minimize lock time and
release it before calling iterator functions since they
may block (updateSongInfo => stat/open/seek/read).
This lock only protects songvecs (and all of them) during
traversals; not the individual song structures themselves.
|
|
|
|
|
| |
This is so we can more consistently deal with locking
needed for thread-safety in iterator functions.
|
|
|
|
| |
We don't modify the Song when we delete it
|
|
|
|
|
| |
"free" implies the songvec structure itself is freed,
which is not the case.
|
|
|
|
| |
Potentially broken free() implementations don't like it
|
|
|
|
|
|
| |
Any pruned files will be noticed during update and pruned
from the live database, so this inefficient function can
go away and never come back.
|
|
Our linked-list implementation is wasteful and the
SongList isn't modified enough to benefit from being a linked
list. So use a more compact array of song pointers which
saves ~200K on a library with ~9K songs (on x86-32).
|