Jump to content

Recommended Posts

Hello,

I am using TSslFtpClient in a multithreaded application. I get crashes inside the OpenSSL DLLs while uploading or downloading many smaller files in three separate threads (so three at a time).

 

I set the Multithreaded property to true.

 

I create all components in code, not in a DFM. So my question is, should I call TSslFtpClient.Create(nil) in the application's main thread, or in the thread where I am actually using it?

 

Currently I have a method CreateComponents which I call via TThread.Synchronize(nil,CreateComponents).

 

Are there any other precautions I have to take?

 

I read about all the async recommendations but I cannot redesign the application from scratch.

 

Many thanks.

 

Share this post


Link to post

Using threads to handle multiple components in parallel is unnecessary, provided you are using async methods, so fully event driven.  I've done tests with hundreds of components running in parallel, the SSL negotiation takes a while so eventually limits the number in parallel.

 

The FTP component should usually be created and destroyed within the thread. 

 

There is a specific component for your purpose, TIcsFtpMultiThread in OverbyteIcsFtpMult.pas with a sample OverbyteIcsXferTst.

 

Angus

 

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×