Can't '--allowmultiple'. Extension being run on another process, (even when it isn't)

Running --allowmultiple, the first instance of gamma (preview 6.0.0.45) runs as expect. Opening a second instance cause the console window to pop up with this error message:

IOException: "The process cannot access the file 'C:\Users\Igor\AppData\Local\Temp\vvvv-package-cache\2024.6.0-0045-g9ab3387bfc\debug\VL.Pipette.HDE.0.0.1\VL.Pipette.HDE.vl.dll' because it is being used by another process."
    StackTrace:
        Microsoft.Win32.SafeHandles.SafeFileHandle { private static Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(string fullPath, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.IO.FileOptions options) { ... } } 
        Microsoft.Win32.SafeHandles.SafeFileHandle { internal static Microsoft.Win32.SafeHandles.SafeFileHandle Open(string fullPath, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.IO.FileOptions options, long preallocationSize, System.Nullable<System.IO.UnixFileMode> unixCreateMode) { ... } } 
        
        System.IO.Strategies.FileStreamHelpers { private static System.IO.Strategies.FileStreamStrategy ChooseStrategyCore(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.IO.FileOptions options, long preallocationSize, System.Nullable<System.IO.UnixFileMode> unixCreateMode) { ... } } 
        System.IO.File { public static System.IO.FileStream OpenWrite(string path) { ... } } 
        VL.Lang.Packages.PackageCompiler+<CompileCoreAsync>d__32 { private virtual void MoveNext() { ... } } 
        System.Runtime.ExceptionServices.ExceptionDispatchInfo { public void Throw() { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void ThrowForNonSuccess(System.Threading.Tasks.Task task) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task, System.Threading.Tasks.ConfigureAwaitOptions options) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter`1 { public TResult GetResult() { ... } } 
        VL.Lang.Packages.PackageCompiler+<CompileAsync>d__30 { private virtual void MoveNext() { ... } } 
        System.Runtime.ExceptionServices.ExceptionDispatchInfo { public void Throw() { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void ThrowForNonSuccess(System.Threading.Tasks.Task task) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task, System.Threading.Tasks.ConfigureAwaitOptions options) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter`1 { public TResult GetResult() { ... } } 
        VL.Lang.Packages.PackageCompiler+<CompilePackagesAsync>d__29 { private virtual void MoveNext() { ... } } 
        System.Runtime.ExceptionServices.ExceptionDispatchInfo { public void Throw() { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void ThrowForNonSuccess(System.Threading.Tasks.Task task) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task, System.Threading.Tasks.ConfigureAwaitOptions options) { ... } } 
        VL.Model.Internal.Solution+<RestoreAsync>d__14 { private virtual void MoveNext() { ... } } 
        System.Runtime.ExceptionServices.ExceptionDispatchInfo { public void Throw() { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void ThrowForNonSuccess(System.Threading.Tasks.Task task) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task, System.Threading.Tasks.ConfigureAwaitOptions options) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter`1 { public TResult GetResult() { ... } } 
        VL.Model.Solution+<RestoreAsync>d__56 { private virtual void MoveNext() { ... } } 
        System.Runtime.ExceptionServices.ExceptionDispatchInfo { public void Throw() { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void ThrowForNonSuccess(System.Threading.Tasks.Task task) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task, System.Threading.Tasks.ConfigureAwaitOptions options) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter`1 { public TResult GetResult() { ... } } 
        VL.UI.Forms.VLContext+<InitializeAsync>d__12 { private virtual void MoveNext() { ... } } 
        System.Runtime.ExceptionServices.ExceptionDispatchInfo { public void Throw() { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void ThrowForNonSuccess(System.Threading.Tasks.Task task) { ... } } 
        System.Runtime.CompilerServices.TaskAwaiter { private static void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task, System.Threading.Tasks.ConfigureAwaitOptions options) { ... } } 
        VL.UI.Forms.VLContext+<<OnOpen>b__11_0>d { private virtual void MoveNext() { ... } } 

And closing the window quits the program.
I have VL.Pipette 0.0.1 extension installed but I’m not using it when I start the second patch.

Editor extensions (.HDE) are always loaded when they are part of your local packages folder. Now both instances you start think that they have to compile that particular extension. And when doing so one of them has the file lock on it already and the other one can’t write and in turn crashes.

  1. why would both think they need to compile it again? For that we would probably need to write more info to the log… or look into that pipet package more closely.
  2. there are command line arguments you could try, for example you could load that pipet offending pipet package as editable, in which case it won’t even try to pre compile it
1 Like

Okay, it seems to have something to do with using ‘override nugets’. My override folder is where all the Nugets have installed to recently. This good but I wish I was paying attention to it. I’ll try cleaning it and seeing if it makes a difference.

Thanks