"free" implies the songvec structure itself is freed, which is not the case.
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).