1. Signal system confuses notifications with commands
2. API ties windows to threads
3. System allows you to send WM_DESTROY from one thread to another even though it provides undefined behavior
4. DestroyWindow() can only be called from a particular thread (related to item #2)
5. The API doesn't detect that the window has been destroyed as far as the application is concerned (whatever happens in ForgetWorkerThread() or PostQuitMessage(), the window actually goes away) without a DestroyWindow() call.
In short, WTF.
[edit: format]