Hey all,
I've managed to solve the issues with threads dying.
I did a test today running a over 10,000 image captures using the "captureimages" method of [gphoto]. Everything seems to work, but the PD counter (based on bangs sent from the second thread) stopped at 2,000 and PD became largely unresponsive.
I was able to stop the thread with the PD method, so PD was not totally dead, but I was unable to send any additional commands to the camera, nor open another patch, or anything useful.
I've attached the thread spawner and the thread code itself.
Anyone have an idea why PD would stop after 2,000 loop iterations and yet the thread (and camera) still working in the background?
I was testing with a very small delay (0) so the loop contained a sleep(0). I'll try a sleep(2) today and tomorrow.
The rest of the code is in SVN.
Thanks, .b.
On Sat, 28 Mar 2009, B. Bogart wrote:
I did a test today running a over 10,000 image captures using the "captureimages" method of [gphoto]. Everything seems to work, but the PD counter (based on bangs sent from the second thread) stopped at 2,000 and PD became largely unresponsive.
I don't know what your problem is, but i found a few things: you are not checking whether the open() works, so, you rely on the next function to do it for you, which means that you lose the error message given by strerror(errno). And then when there's an error after that, you don't close(fd) by yourself, even though you do it when everything does work.
Note that you can't have more than about 1000 active fds at a time with Linux (it may be distro-dependent). Check what's the current limit on your system (2000?) using "ulimit -n" and then set that to a lower value like "ulimit -n 300" and try again, to see whether it has anything to do with filehandles. if it does, it's probably not because of one of the two bugs above, if I can suppose that the 2000 tries reported above do not end with an error.
Find the process ID of the second thread. let's say it's 12345. then do "ls -l /proc/12345/fd" to list all open-files of that process, and see if there is anything abnormal. If you have many "second threads" then... you'd need to look for each of them, I guess. Or are the fds shared among all threads?
I was able to stop the thread with the PD method, so PD was not totally dead, but I was unable to send any additional commands to the camera, nor open another patch, or anything useful.
This sounds even more like "too many open files". Did that message appear in the console? It would also imply that the filehandle table is shared.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801, Montréal, Québec