Many thanks for pointing me to your posting - I will look more closely at it.
One remark: if an I2c device holds low SCL or SDA then also these routines won't help...
This seems to be the issue - that an I2C slave device can get disrupted in its internal timing cycle and not respond properly. Two issues then present themselves:
i) ensuring the master has some sort of timeout, so as not to just keep waiting for the slave to respond (and this is where your link helps), and
ii) the issue of how to "reset" the slave given that there is no reset line for these devices. Some articles describe sequences of sending stop and start bits to try to get it communicating again. I have tried this and it seems sometimes to work (depending on I2C chip). Other approach is to cycle the power to the slave - this certainly works and this is where the suggestion from an earlier post to power the chip from a port line of the MCU, is a good idea.