As I said in the last message, there has to be synchronization external to the sleep code to make such a situation work. For example lock list add to list unlock list sleep lock list free unlock list and another process will do lock list if(something to wakeup) wakeup unlock list Things calling sleep/wakeup can and do perform such synchronization. It's part of writing a multithreaded kernel, i.e., snchronizing accesses to structures. You don't haphazardly free things when there are possible accesses to them outstanding in other threads, or at least I try not to. Unfortunately, postnote is an asyncronous event often initiated by someone that's trying to stop something. It doesn't know about this external synchronization.