As far as I can see, this is a fairly common problem lately. In ICP, due to the novelty of the technology, there are quite a lot of “pitfalls” that strongly affect canisters. This again proves why it’s important to thoroughly audit all code before deploying to the main network. This saves not only time and money, but also shows in which direction it is better to move during development.
Responses are processed for either stopping or frozen canisters, no explicit traps.
The difference is that a canister that’s frozen will not make more outgoing calls. So in case where you have an infinite loop that keeps sending a new one whenever you process a response, it will break out of it.