Regression from recent changes in OutputStream

!1432 (merged) modified the behaviour of OutputStream such that it tries to create the output file during start instead of the first time execute is invoked and there is something to write.

This behaves perfectly fine in normal cases, but there is one corner case when it causes a segfault while before it was working fine: when a default configured OutputStream is used, as in:

gaudirun.py --option "ApplicationMgr(OutStream=['OutputStream'])"

A default configured OutputStream is (was) essentially a no-op algorithm, because the properties ItemList and OptItemList are empty, so it is requested to write nothing nowhere. The code is somehow protected so that when (Opt)ItemList are empty OutputStream does not even try to connect the output file, so it ignores if the output file is not configured.

The change introduced in !1432 (merged) expects that the output file configuration is always handled, and the conversion service pointer (m_pConversionSvc) is set, but as explained, empty (Opt)ItemList cause that branch to be skipped and we get a segfault when we try to access the conversion service at start.

At this point the options are:

  • protect start to not create the output file if (Opt)ItemList is empty (actually it is enough to test m_pConversionSvc before using it)
    • this is restoring the old behaviour so that gaudirun.py --option "ApplicationMgr(OutStream=['OutputStream'])" is equivalent to gaudirun.py --option "ApplicationMgr(OutStream=[])"
  • ensure that whenever used OutputStream is correctly configured (with ItemList and Output)
    • this makes the use case gaudirun.py --option "ApplicationMgr(OutStream=['OutputStream'])" invalid, which makes some sense as what is the point in configuring a no-op OutputStream when it could be directly skipped?

I cannot decide which option to pick. The first resolves a regression, while the second changes the behaviour implicitly assuming that a no-op OutputStream is a bug rather than a feature.

/cc @isanders @cburr @erodrigu @pkoppenb

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information