-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hard crash with waitForConfig()
timeout
#90
Comments
Hmm. However, it is not clear why discarding the exception would cause a subsequent crash. That seems like it could be a device adapter issue, though it is hard to tell with just this information. For example, it could be that the NikonTI device adapter crashes when a move is initiated before the previous move has completed. Any chance you can reproduce this under conditions that can display a C++ backtrace? Perhaps the easiest is to run the equivalent BeanShell script in the MM application and look at the group = "Channel";
chans = mmc.getAvailableConfigs(group);
for (int i = 0; i < 20; i++) {
for (int ch = 0; ch < chans.size(); ch++) {
chan = chans.get(ch);
mmc.setConfig(group, chan);
mmc.waitForConfig(group, chan);
}
} Also, you can change the wait timeout from 5000 ms to something greater by setting the |
Thanks for the hints! You are right the crash is not caused by swallowed exceptions, I was able to reproduce the crash with both There seem to be some timing issues:
Below some crashlogs from the BeanShell scripts: As I was able to reproduce with the MicroManager Java GUI, this is certainly not a pymmcore issue. |
Interesting. It's unfortunate that part of the call stack is lacking symbols, but the fact that it goes through MSVCP100.dll (the C++ runtime for Visual Studio 2010) might be a hint, because most of MM no longer uses it (except for some device driver DLLs that we link to). The JVM itself appears to use msvcr100.dll (the C runtime) but not MSVCP100.dll, based on what it ships. SutterLambda does not use MSVCP100 and I don't think NikonTI does, either. I'm not sure about AndorSDK3, whose DLLs I don't have at hand (you can check if you like). Given that Probably the fastest way is to run the test in MMStudio with the Problem Report (Help menu) capturing the log (it's "crash-robust logging" will prevent the last few log entries from being lost -- though it has a small chance of influencing timing-sensitive behavior). The report/log can be viewed when restarting MMStudio after the crash. If our guess that it comes from a device is correct, the log should end with a line saying "Will set property ..." for the device. Would be great if you could create an issue for |
I have issues with a Nikon reflector turret
TIFilterBLOCK1
timing out leading to kernel crashes. Setup is the following:waitForSystem()
I get a runtime error as expected:RuntimeError: Wait for device "TIFilterBlock1" timed out after 5000ms
waitForConfig('Channel',channel)
I get a kernel crash:The Kernel crashed while executing code in the the current cell or a previous cell
or no error at all and the loop keeps running, but I can find the timeout in the log file:
[ERR,Core] Error occurred in device waitForConfig: Wait for device "TIFilterBlock1" timed out after 5000ms
Seems like in
waitForSystem()
timeout errors are propagated fromwaitForDevice()
->waitForDeviceType()
->waitForSystem()
While in
waitForConfig()
the errors are caught:So not interrupting and just logging the error with
waitForConfig()
seems to work as designed in MMCore (although this behaviour was unexpected to me). But could this be linked to the subsequent pymmcore crashes?The text was updated successfully, but these errors were encountered: