Skip to content

StopThread() cannot stop the newly opened background thread, resulting in unlimited thread growth and eventually breaking the Linux system limit. #186

@hkszlq

Description

@hkszlq

in src/DinkToPdf/SynchronizedConverter.cs

private void StopThread()
{
lock (startLock)
{
if (conversionThread != null)
{
kill = true;
while (conversionThread.ThreadState == ThreadState.Stopped)
{
}
conversionThread = null;
}
}
}

 private void StartThread()
    {
        lock (startLock)
        {
            if (conversionThread == null)
            {
                conversionThread = new Thread(**Run**)
                {
                    IsBackground = true,
                    Name = "wkhtmltopdf worker thread"
                };

                kill = false;

                conversionThread.Start();
            }
        }
    }

private void Run()
{
while (!kill)
{
//get next conversion taks from blocking collection
Task task = conversions.Take();

            lock (task)
            {
                //run taks on thread that called RunSynchronously method
                task.RunSynchronously();

                //notify caller thread that task is completed
                Monitor.Pulse(task);
            }
        }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions