[mdbrebase] Make sure to use a unique temporary filename.
authorRolf Bjarne Kvinge <rolf@xamarin.com>
Tue, 26 May 2015 11:15:41 +0000 (13:15 +0200)
committerRolf Bjarne Kvinge <rolf@xamarin.com>
Tue, 26 May 2015 12:08:53 +0000 (14:08 +0200)
Otherwise parallel invocations might end up stomping on eachother
(these two files are processed in parallel):

    Processing /work/maccore/master/maccore/builds/install/mac/xammac/bcl/mscorlib.dll.mdb
    Processing /work/maccore/master/maccore/builds/install/mac/net_4_5/bcl/mscorlib.dll.mdb

    Unhandled Exception:
    System.IO.FileNotFoundException: /var/folders/g9/k5kx4z211ld_lwlbfxv5rq040000gn/T/mscorlib.dll.mdb does not exist
    File name: '/var/folders/g9/k5kx4z211ld_lwlbfxv5rq040000gn/T/mscorlib.dll.mdb'
      at System.IO.File.Move (System.String sourceFileName, System.String destFileName) [0x00000] in <filename unknown>:0
      at Mono.MdbRebase.MdbRebase.RewriteMdbFile (System.String inputFile) [0x00000] in <filename unknown>:0
      at Mono.MdbRebase.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0
    [ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: /var/folders/g9/k5kx4z211ld_lwlbfxv5rq040000gn/T/mscorlib.dll.mdb does not exist
    File name: '/var/folders/g9/k5kx4z211ld_lwlbfxv5rq040000gn/T/mscorlib.dll.mdb'
      at System.IO.File.Move (System.String sourceFileName, System.String destFileName) [0x00000] in <filename unknown>:0
      at Mono.MdbRebase.MdbRebase.RewriteMdbFile (System.String inputFile) [0x00000] in <filename unknown>:0
      at Mono.MdbRebase.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0

mcs/tools/mdbrebase/mdbrebase.cs

index f4b8fa9ea6d5f7e07927e43ae2664f7e5d49edd7..9e18649dbe56a35e48040647efaad97eabdc299d 100644 (file)
@@ -84,7 +84,7 @@ namespace Mono.MdbRebase
 
 
                        var mdbName = new FileInfo (inputFile).Name;
-                       var tmpMdb = Path.Combine (Path.GetTempPath (), mdbName);
+                       var tmpMdb = Path.GetTempFileName ();
                        var finalMdb = inputFile;
                        if (settings.OutputDirectory != null)
                                finalMdb = Path.Combine (settings.OutputDirectory, mdbName);