Question:
Hi Chilkat, irregular crashes pop-up in constructor of Email class in v9.4.1 SP1 (ChilkatDotNet45.dll). It seems to be related to multithreaded usage.
Here is the exception message & stacktrace:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at ClsEmail.createNewCls()
at Chilkat.Email..ctor()
at ChilkatCrashTest.Crasher.Crash() in c:\Source\My\ChilkatCrasher\ChilkatCrashTest\Crasher.cs:line 13
at ChilkatCrashTest.Program.<Main>b__0(Crasher lCrasher) in c:\Source\My\ChilkatCrasher\ChilkatCrashTest\Program.cs:line 25
at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c__DisplayClass11.<ExecuteSelfReplicating>b__10(Object param0)
at System.Threading.Tasks.Task.Execute()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
at System.Threading.Tasks.Task.ExecuteEntry(Boolean bPreventDoubleExecution)
at System.Threading.ThreadPoolWorkQueue.Dispatch()
The problem can be reproduced (appears NOT always, but with little patience [5-10 runs]) with following "brute-force" code:
class Program
{
static void Main(string[] args)
{
List<Crasher> lList = new List<Crasher>();
for (int i = 0; i < 10; i++)
{
lList.Add(new Crasher());
}
ParallelOptions lOptions = new ParallelOptions();
lOptions.MaxDegreeOfParallelism = System.Environment.ProcessorCount;
Parallel.ForEach<Crasher>(lList, lOptions, lCrasher =>
{
for (int i = 0; i < 100000; i++)
{
lCrasher.Crash();
}
});
}
}
public class Crasher
{
public void Crash()
{
Chilkat.Email lEmail = new Chilkat.Email();
}
}
In reality it appears one time a month and crashes whole service process. :-(
Any idea?