Can you touch a file called outputProjectDict.cxx_tmp_5513 in that directory and then try to call std::rename('outputProjectDict.cxx_tmp_5513 into outputProjectDict.cxx', 'somethingelse')? We need to figure out why std::rename fails in this case.
Executing “std::rename” from the ROOT prompt works fine.
It looks like this is some kind of a problem in “Windows host” <-> “Linux guest” file system synchronization (though it could also be a general problem for all kinds of hosts when a “Shared Folder” is used in VirtualBox).
In lines 2944 - 2955 (rootcling_impl.cxx"), there is a special “WIN32” fix which may be relevant also in this case.
Alright, if a simple std::rename works then the problem might be with renaming files that are currently in use (i.e. what the WIN32 workaround is for). Can you std::rename a file (e.g. a ROOT file) in that partition after you have opened it (e.g. as a TFile)?
P.S.
my link pointed to the wrong lines of course, fixed above
I can confirm that one cannot “rename” an opened file.
I tried a simple fix, which seems to work.
Move the lines 2948/2949: “if (ifile.is_open()) ifile.close();” to a place right before the line 2944 “#ifdef WIN32”.
Note that the problem originates in the “commit” procedure itself. In the line 2941 it opens the relevant file (and unfortunately leaves it opened). Simply closing it seems to solve the problem.
BTW. Maybe there are other places where some file is “left unnecessarily opened” and should be fixed, too.