The Truth Hurts
That moment when I realized that we had isCanceled and isCancelled flags. And getters and setters for both. And methods that made sure that they were in sync. And a background GC process made sure they were in sync, because the “sync” method had a bug(s?) in it somewhere. And instrumentation around all of the above. And reports tracking discrepancies between them. (Incidentally, there was a perfectly logical for pretty much each of the above steps. I’m not saying it was a good reason, but it was certainly logical) ( This article also appears on my blog )