@Hlaaftana Thanks. That was rather "obscure"; I wouldn't have thought there were two versions of createThread(). Unfortunately, I changed the code as you suggested, and it does not make the crash go away.
I think there is a single example of calling runForever() in the documentation. It is just called at the end of a module. If this is the only correct way to use it, it would be good to document this, as it could also just be "incidental" in this example. But the bigger question is, what if the whole "async" thing is an optional feature of my module? I'm creating an alternative API to allow threads to send messages to each other. Sending messages transparently (as much as possible) across the cluster is just an "optional feature" for my API, so it doesn't make sense to force the user into "locking the main thread" with runForever(), unless the user wants the application to become part of a cluster, which could very well be decided throught a run-time parameter, or even interactively (off then on then off ...) throught the user-interface.