[DUG] Program crashes - anyone knows why?
Robert martin
rob at wildsoft.co.nz
Mon Nov 27 09:07:05 NZDT 2006
Hi
I don't know if this helps but with thread problems we have noticed they
show/ appear more on hyperthreaded CPUs (and I assume multi core CPUs).
A few years ago we had a situation where a clients pc crashed but ours
was fine. We thought it was a problem with the clients machine but it
turns out it was a problem with our thread code. If your are not
testing on a HT or multi core CPU try that, you might be able to
replicate it for yourself (and therefore fix it easier).
Rob Martin
Software Engineer
phone +64 03 377 0495
fax +64 03 377 0496
web www.chreos.com
Wild Software Ltd
Gajo Csaba wrote:
> Hello,
>
> I wrote a multithreaded application for a client and it crashes on the
> client's computer, while it works ok on mine. Can someone give me a
> clue as to what might be the problem?
>
> The program works like this: I have two TThreadLists: one contains a
> list of keywords (~20000) while the other a list of proxy servers
> (~500). When the user clicks on the button, 21 threads are created. 1
> thread directly accesses Google, enters the keyword and processes the
> result. The other 20 threads do the same, except they use a proxy server.
>
> OK, so each thread grabs a keyword from the list and then removes it
> from the list, so no one else could use it again. It tries to access
> the internet. If the connection fails then it means the proxy doesn't
> work, so it gets another proxy address from the list. No two threads
> ever share the same proxy. If there are no more free proxies left, the
> thread dies (and returns the unprocessed keyword to the list).
>
> They do this until all the keywords are processed. When it seems like
> there are no more keywords left, the 1st thread (the one not using a
> proxy) changes its priority to tpLowest and loops forever, waiting for
> another keyword to show up.
>
> Like I said, this works perfectly on my computer. On the client's
> computer (Windows XP I think) an error dialog pops up saying:
>
> <program name> has encountered a problem and needs to close. We are
> sorry for the inconvenience.
> If you were in the middle of something, the information you were
> working on might be lost.
>
> If the client clicks on the Close button, the entire application will
> shut down. However, if he ignores the message, the application will
> keep on working and it will eventually finish it's job, and then the
> client can export the result to a file.
>
> Because the application works fine, I'm guessing this is just one
> thread that has crashed. The problem is the error dialog shouldn't
> appear. I didn't make it appear with MessageDlg, so it must be
> Windows' internal something. The error occurs somewhere at the start,
> around the 1000th keyword.
>
> I tried lowering the number of threads to 5, but this didn't help either.
>
> Any idea what may be causing this problem? The only two shared global
> variables are the lists, though they are in the main unit, not in the
> same unit where the threads are. But these are TThreadLists so they
> should be thread-safe. There are no other global variables.
>
> The thread's Execute method itself does not contain a try-except
> block. I guess I could try this and then when an exception occurs I do
> not display an error message - but I'm not sure if this would solve
> the problem.
>
> To download a file from the Internet I use a modified version of the
> GetInetFile method found at
> http://delphi.about.com/od/internetintranet/l/aa013001a.htm However
> this method is also sorrounded with a try-except block which should
> prevent this kind of error.
>
> I don't know if there's anything else. Anyone has an idea what went
> wrong? Why it works perfectly on my computer and doesn't on the clients?
>
> I'm using Delphi 5, no custom components. I'm also using Windows XP
> with service pack 2.
>
> If you've read the whole mail then thank you :)
> If you could also suggest what the error might be then I would be most
> grateful. I've looked through the entire code several times and can't
> see anything that's wrong in it. Everything seems to be synchronized,
> when I access the items of the ThreadList I use LockList-UnlockList...
> The only thing that isn't synchronized is the GetInetFile method, but
> I'm guessing that shouldn't be a problem. Or should it?
>
> Thanks,
> Csaba
>
> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
>
More information about the Delphi
mailing list