When TThreadExecutor creates the IMT thread pool (as opposed to when the thread pool is explicitly created by users via ROOT::EnableImplicitMT), it deletes it at destruction time:
The same cannot be said for TTreeProcessorMT, although the two classes should have consistent behavior:
This looks like a total accident: TTreeProcessorMT::Process makes use of TParTreeProcessingRAII, the constructor of which calls ROOT::EnableImplicitMT() (with no arguments) and the destructor of which never calls ROOT::DisableImplicitMT().
I don't think this is the desired behavior, but I'd like to hear other opinions. Also, I don't know how to fix it, I am not familiar with how TParTreeProcessingRAII is expected to behave.