TorSharp icon indicating copy to clipboard operation
TorSharp copied to clipboard

System.Runtime.InteropServices.SEHException when trying to run multiple instances.

Open alandixon opened this issue 2 years ago • 4 comments

Specifically, I'm using the MultipleInstances demo project.

The variable parallelInstances is set to 4 by default. For this value and any other value over 2, I intermittently get the SEHException, usually around the time everything starts to tear down.

After quite a lot of fiddling, I'm fairly sure the problem is to do with the virtual desktops; If I force TorSharpSettings.ToolRunnerType to return ToolRunnerType.Simple, the problem goes away. Of course, if I do that, I get a lot of popup privoxy windows, but it proves the point.

I am using Windows 10 64-bit which is why the ToolRunnerType defaults to VirtualDesktop.

I've tried lock in a few places to force single threading but not managed to isolate a vulnerable area of code.

The message is:

System.Runtime.InteropServices.SEHException
  HResult=0x80004005
  Message=External component has thrown an exception.

and the stack trace in Visual Studio 2022 is:

[Exception] System.Private.CoreLib.dll!Microsoft.Win32.SafeHandles.SafeFileHandle.ReleaseHandle()
[Exception] System.Private.CoreLib.dll!System.Runtime.InteropServices.SafeHandle.InternalRelease(bool disposeOrFinalizeOperation)
[Exception] System.Private.CoreLib.dll!System.Runtime.InteropServices.SafeHandle.Dispose(bool disposing)
[Exception] System.Private.CoreLib.dll!System.Runtime.InteropServices.SafeHandle.~SafeHandle()
[Managed to Native Transition]	
System.Private.CoreLib.dll!Interop.Kernel32.CloseHandle(System.IntPtr handle)
System.Private.CoreLib.dll!Microsoft.Win32.SafeHandles.SafeFileHandle.ReleaseHandle()
System.Private.CoreLib.dll!System.Runtime.InteropServices.SafeHandle.InternalRelease(bool disposeOrFinalizeOperation)
System.Private.CoreLib.dll!System.Runtime.InteropServices.SafeHandle.Dispose(bool disposing)
System.Private.CoreLib.dll!System.Runtime.InteropServices.SafeHandle.~SafeHandle()

alandixon avatar Mar 21 '23 23:03 alandixon

I think this issue probably emerged immediately after 2.10.0 release. The System.Runtime.InteropServices.SEHException bug can be reproduced just by creating new Tor identities in quick succession, from my studies.

seanstardev avatar Jul 07 '23 18:07 seanstardev

I also think I read about an arbitrary crash that can happen when using this library, and I definitely have experience of TorSharp crashing out pretty frequently. May be related to this bug - not sure.

All this said - it is a brilliant library and I really admire the work that has gone into it. Super impressive.

seanstardev avatar Jul 11 '23 21:07 seanstardev

Frankly, I wrote the Virtual Desktop code when I had less experience with PInvoke and Windows APIs. I think there are probably some bad assumptions in the implementation. I have only a little time these days to work on TorSharp due stuff in my personal life so if anyone has a chance to look at a fix or even provide a minimal repro, that might help. I'll leave this open since it appears it's not an isolated problem (4 upvotes).

joelverhagen avatar Oct 24 '23 14:10 joelverhagen

This happened to me in version 2.15.0 as well

itHanVV avatar Nov 22 '23 13:11 itHanVV