Using TProof in compiled application


Sorry for the never ending thread of questions, but I’m running into a few issues…

The current one is that I’m trying to switch from starting my PROOF jobs in an interactive CINT prompt, to doing everything from within a compiled application. The first thing I’m trying to do is just to create a very simple application that does more or less just:

int main() { ... TProof* proof = TProof::Open( "username@proof_server" ); ... }

I’m observing something very strange. This program starts running just as I would expect, I get the messages from TProof that it connected to the server. But as the program tries to terminate, I get a crash. I’ve put a message to std::cout just before “return 0;” in my main() function, so I know that the crash happens at termination.

I get such an output:

It seems that TProof is working okay before the crash, as I could use it to upload a PAR package to the worker nodes.

Any ideas why this crash happens?



Just to not leave this thread open: This issue is settled in between. The problem was that I was leaving it up to GCC to delete my objects when the executable finished. The executable for some reason left the deletion of the TProof object last when deleting the ROOT objects, and this caused the crash.

After I started explicitly deleting the TProof related objects in my code, the crash disappeared. So the moral of the story is that the object returned by TProof::Open(…) should be explicitly deleted in a compiled application.


Dear Attila,

The problem is that the order in which objects are destroyed matters, and we can only control it by calling first the TProof destructor.

Anyhow, thanks for reporting this: I will try to understand whether we can avoid the crash in the case one forgets to delete the object.