In the function: RemoveAllLockedFiles(void), if we call TRI_RemoveVectorString() and TRI_RemoveVector() the next elements in the vector will be memmoved to the left. The next iteration of the loop will check the element at position 1 (but we are skipping the new element at position 0), so these calls have been removed.
The other alternative would be to have a loop: while (FileNames._length > 0) and take always the element at position 0. But this has the disadvantage that we are performing memmove() when later the vectors will be freed anyway.