Well it's certainly not an infinite loop. I just ran your code as is and it printed "FREE" just once which is what you would expect. Are you sure the code you are running is the same as the code you posted here?
As a sidenote, you will want to listen to demerphq in regards to your variable names. Wise words indeed.