aboutsummaryrefslogtreecommitdiffstats
path: root/src/songvec.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2008-10-21update: fix multiple deletes from *vec iteratorsEric Wong1-1/+5
{song,dir}vec_for_each each failed to gracefully handle deleted files when iterating through. While we were thread-safe, we were not safe within the calling thread. If a callback we passed caused sv->nr to shring, our index would still increment; causing files to stay in the database. A way to test this is to remove 10 or so contiguous songs from a >10 song directory.
2008-10-21{dir,song}vec: these structs are constEric Wong1-1/+1
We definitely don't modify them here.
2008-10-14{dir,song}vec: fix off-by-one errors in {dir,song}vec_deleteEric Wong1-7/+6
Found by Valgrind while looking for another bug... Hmm.. I should really just make this code generic since they're duplicated...
2008-10-13songvec: avoid holding nr_lock during free(3)Eric Wong1-3/+5
We only need to lock sv->nr changes to prevent traversals ( why it's called "nr_lock"). free(3) is a "slow" function on my system; so we can avoid unnecessarily holding a lock long for longer than needed.
2008-10-08don't include os_compat.hMax Kellermann1-0/+3
When there are standardized headers, use these instead of the bloated os_compat.h.
2008-10-08song: converted typedef Song to struct songMax Kellermann1-11/+14
Again, a data type which can be forward-declared.
2008-10-07songvec: pass const pointersMax Kellermann1-2/+5
Pass const songvec pointers to songvec_find() and songvec_for_each().
2008-10-07songvec: lock traversals for thread-safe updates/readsEric Wong1-10/+34
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.
2008-10-07songvec: add songvec_for_each iteratorEric Wong1-0/+13
This is so we can more consistently deal with locking needed for thread-safety in iterator functions.
2008-09-29songvec: songvec_delete takes a const Song pointerEric Wong1-1/+1
We don't modify the Song when we delete it
2008-09-29songvec_free => songvec_destroyEric Wong1-1/+1
"free" implies the songvec structure itself is freed, which is not the case.
2008-09-23songvec: avoid free(NULL)Eric Wong1-2/+4
Potentially broken free() implementations don't like it
2008-09-23songvec: remove songvec_pruneEric Wong1-23/+0
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.
2008-09-23Replace SongList with struct songvecEric Wong1-0/+89
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).