John, I have lied to you when I said yesterday that new in-process czar should behave exactly as old XML-RPC stuff. I have re-checked the old implementation and I see that it's not true, in the old code UserQuery::submit() was indeed executed in a separate thread, so czar returned earlier. In the new code we can do the same by moving call to uq->submit(); inside finalizer lambda in Czar::submitQuery() except that we cannot do it because submit() calculates queryId and result table name which are needed by czar when it returns from Czar::submitQuery(). I would suggest to move the code that registers query in QMeta from submit() into constructor, then we can execute the whole submit() method in a finalizer thread, I think that should make the code abit more cleaner than your current solution.
Sorry for this mess, I should have checked it sooner