We have a similar tps but was placed inside the “Read TPS” of an IB thread, which was defined as PROTOCOL:upoc. It works fine without any error.
Since you are place it in the OB data tps and get this error, msiGlobalInit: Called more than once!, is it possible that at some point msiAttach was called?
my 2 cents..