move the death/hup handling in the main thread; axe b_prepare()