On 03/16/2013 03:48 PM, Geoffray Levasseur-Brandin wrote: > I'm mailing you as I have a very strange behaviour of a program > I'm making > using FPC 2.6.2 and Lazarus from trunk (updated this morning). As far as I > know it's either a compiler bug or a Synapse bug.
That is always a dangerous assumption;) > > Thank you for any help ! > There is quite more needed to get the code running. I can't get it compiled on my kubuntu 12.04. It complains about duplicate resources. Anyways, looking at the code, you create a thread TDownloadListLoop that loops over the files to download. The download is done in another thread TDownloadDaemon created in TDownloadListLoop.Execute with PDownloader^.StartDownload. TDownloadListLoop.Execute then loops until PDownloader^.State = drDone. Now, in TDownloader.HTTPComplete, called from TDownloadDaemon.Execute with a synchronize you do FState := drDone followed by FDownloadFeedback(FResponse) and a FHttp.Clear. Chances are that TDownloadListLoop.Execute continues and starts a download of the next file before TDownloader.HTTPComplete does the FHttp.Clear. PDownloader^.State = drDone is too early. Buy the way, you didn't mention if you encountered the problem with http or ftp. So above is just speculation. One of the places where it can go wrong. In any case I don't understand your architecture. Why using a thread for the loop, do a HEAD in the same thread and then create another thread to do the GET? If you only do one download at a time why the 2nd thread TDownloadDaemon? On top of that your code becomes overly complex because methods in TDownloader are called in the context of the TDownloadListLoop thread and of the main thread (synchronize from TDownloadDaemon). A good recipe for race conditions and unreproducible errors. Ludo _______________________________________________ fpc-devel maillist - [email protected] http://lists.freepascal.org/mailman/listinfo/fpc-devel
