only free when necessary (double free bug)