Stuck in an interrupt?

Don't use int for storing micros() use unsigned long

Don't use | instead of || for or in your while

failSafe should be declared as volatile (and should be a Boolean with true or false and not an int with HIGH or LOW just for clarity and good memory usage)