Thread-safety

Stimulsoft Reports.NET discussion
Post Reply
tijmen
Posts: 6
Joined: Wed Jan 11, 2023 2:28 pm

Thread-safety

Post by tijmen »

We are experiencing some sporadic exceptions when calling StiReport.Load. There seems to be an issue loading fonts in FontFamily regarding thread-safety. Locking StiReport.Load solves this issue, but is not a preferred solution. We are using Stimulsoft.Reports.Web.NetCore 2023.1.3.

Exception:

Code: Select all

 ---> InnerException: System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
   at Stimulsoft.Drawing.FontFamily.CreateSixFont(Single sizeInPoints, FontStyle style) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Drawing\Drawing\FontFamily.cs:line 148
   at Stimulsoft.Drawing.Font..ctor(FontFamily family, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Drawing\Drawing\Font.cs:line 408
   at Stimulsoft.Report.StiReportObjectStringConverter.ConvertStringToFont(String str) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\StiReportObjectStringConverter.cs:line 537
   at Stimulsoft.Report.StiReportObjectStringConverter.StringToObject2(String str, Type type) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\StiReportObjectStringConverter.cs:line 302
   at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(Object obj, StiPropertyInfoCollection props) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Base\Serializing\StiSerializing.cs:line 1086
   at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(Object obj, StiPropertyInfoCollection props) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Base\Serializing\StiSerializing.cs:line 1057
   at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(Object obj, StiPropertyInfoCollection props) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Base\Serializing\StiSerializing.cs:line 1057
   at Stimulsoft.Base.Serializing.StiSerializing.DeserializeObject(Object obj, StiPropertyInfoCollection props) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Base\Serializing\StiSerializing.cs:line 1057
   at Stimulsoft.Base.Serializing.StiSerializing.Deserialize(Object obj, Stream stream, String application) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Base\Serializing\StiSerializing.cs:line 1254
   at Stimulsoft.Report.SaveLoad.StiXmlReportSLService.Load(StiReport report, Stream stream) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\SaveLoad\StiXmlReportSLService.cs:line 94
   at Stimulsoft.Report.StiReport.Load(StiReportSLService service, Stream stream) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\StiReport.SaveLoad.cs:line 1625
   at Stimulsoft.Report.StiReport.Load(Stream stream) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\StiReport.SaveLoad.cs:line 1492
   at Stimulsoft.Report.StiReport.Load(Byte[] bytes) in D:\Stimulsoft\Stimulsoft.Reports\Stimulsoft.Report\StiReport.SaveLoad.cs:line 1519
Repro code:

Code: Select all

    static void Main(string[] args)
    {
        var tasks = new List<Task>
        {
            Task.Factory.StartNew(CreateReport),
            Task.Factory.StartNew(CreateReport),
            Task.Factory.StartNew(CreateReport),
            Task.Factory.StartNew(CreateReport),
            Task.Factory.StartNew(CreateReport)
        };

        Task.WaitAll(tasks.ToArray());
        Console.WriteLine("Done!");
    }

    private static Task CreateReport()
    {
        StiLicense.Key = _licenseKey;
        StiOptions.Export.Pdf.CreatorString = "Stimulsoft";

        var template = File.ReadAllBytes("Report.xml");

        var report = new StiReport();
        report.Load(template);

        return Task.CompletedTask;
    }
Lech Kulikowski
Posts: 6263
Joined: Tue Mar 20, 2018 5:34 am

Re: Thread-safety

Post by Lech Kulikowski »

Hello,

We need some additional time to investigate the issue, we will let you know about the result.

Thank you.
#9826
Lech Kulikowski
Posts: 6263
Joined: Tue Mar 20, 2018 5:34 am

Re: Thread-safety

Post by Lech Kulikowski »

Hello,

Please check the 2023.1.4 build.

Thank you.
Post Reply