I've had a very similar stuff, as in something crashing only when run many times when I had a bug in a container type implemented in C. Basically, I had wrong refcount for the objets, which caused them to be freed by garbage collectore while they have been still used. Maybe something similar happens in the code that wraps windows API that handles file opening. That would explain why the bug never happens on linux. A good candidate would be incorrect refcount for the return value if the file does not exist. Try something like this: s="some_file" rets=[] for i in range(1000): rets.append(os.stat(s)) gc.collect() #Do something that uses lots of RAM (but a random amount, preferably in small blocks) print rets if it crashes then you have exactly that issue. 1000 might be not enough to toggle the crash though, as you need the OS to actually allocate different segments of memory for this to work. The more RAM you have the more cycles you need to toggle the crash. At least this approach helped me to debug extension modules written in C.
BTW, for me on VM the test case does not crash. But I have SP2 windows there. On Wednesday 05 October 2011 19:37:07 Ram Rachum wrote: > On Wed, Oct 5, 2011 at 6:51 PM, Amaury Forgeot d'Arc <amaur...@gmail.com>wrote: > > 2011/10/5 Ram Rachum <r...@rachum.com>: > > > Okay, I've spent a few hours print-debugging, and I think I've > > > almost got it. > > > > > > The crash happens on a line: > > > st = os.stat(s) > > > > > > inside `os.path.isdir`, where `s` is a string 'C:\\Documents and > > > Settings\\User\\My Documents\\Python > > > Projects\\GarlicSim\\garlicsim\\src' This is a directory that > > > happens not to exist, but of course this is not> > > a > > > > > good reason to crash. > > > I have tried running `os.stat(s)` in the PyPy shell with that same > > > `s`, > > > > but > > > > > didn't get a crash there. I don't know why it's crashing in Nose but > > > not> > > in > > > > > the shell. > > > > > > Does anyone have a clue? > > > > it's possible that it's a RPython-level exception, or a bad handle > > because too many files wait for the garbage collector to close them. > > > > Can you give more information about the crash itself? > > - What are the last lines printed in the console? Try to disable > > "stdout capture" in Nose, by passing the -s option. > > This is the entire output: > > Preparing to run tests using Python 2.7.1 (080f42d5c4b4, Aug 23 2011, > 11:41:11) > [PyPy 1.6.0 with MSC v.1500 32 bit] > Running tests directly from GarlicSim repo. > Pypy doesn't have wxPython, not loading `garlicsim_wx` tests. > nose.config: INFO: Set working dir to C:\Documents and Settings\User\My > Documents\Python Projects\GarlicSim > nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$'] > nose.plugins.cover: INFO: Coverage report will include only packages: > ['garlicsim', 'garlicsim_lib', 'garlicsim_wx', 'test_garlicsim', > 'test_garlicsim_lib', 'test_garlicsim_wx', 'garlicsim', 'garlicsim_lib', > 'garlicsim_wx', 'test_garlicsim', 'test_garlicsim_lib', 'test_garlicsim_wx', > 'garlicsim', 'garlicsim_lib', 'garlicsim_wx', 'test_garlicsim', > 'test_garlicsim_lib', 'test_garlicsim_wx'] > > > > > - after the pypy process has exited, type "echo %ERRORLEVEL%" in the > > > same console, to print the exit code > > of the last process. Which number is it? > > -1073741819 > > > -- > > Amaury Forgeot d'Arc _______________________________________________ pypy-dev mailing list pypy-dev@python.org http://mail.python.org/mailman/listinfo/pypy-dev