fixed bug where timeout reply doesn't cancel timer