yes I know the code and used it a couple of years ago, it is dated 2005 but switches debouncing questions occur every week in the forum, it should be a sticky post :)
Recently I went through the excellent walkthrough
In general I use volatile for my variable that I read and write both in the ISR and elsewhere.
Why key_press is not volatile? It's more about optimization than cache access or something like this?