This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Problem with MAP_PRIVATE for fork() using pypy


I have recently patched pypy (http://www.pypy.org) to compile under Cygwin. Pypy implements a Python interpreter with a?Just In Time (JIT) compiler.?At runtime pypy uses a MAP_PRIVATE anonymous mmap to allocate memory for its JIT. This seems to be cause of fork() calls failing. A sample error message is included below.?I have discussed this problem at length with the pypy developers. The discussion is online at:

http://www.mail-archive.com/pypy-dev@python.org/msg02448.html?

Finally I hacked the pypy sources and replaced the MAP_PRIVATE anonymous mmap allocation with MAP_SHARED at the place where pypy allocates its JIT temporary memory, and the code runs fine (but that's not a solution for pypy, as their JIT child and parent processes likely will drift apart for any real non-toy program and do need separate memory space).?From what the pypy folks say, this is not a pypy issue but a Cygwin issue.


$ ./pypy-c
Python 2.7.2 (ffd032c196fb+, May 31 2012, 23:19:38)
[PyPy 1.9.1-dev0 with GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``correct code doesnt need any
tests <duck>''
>>>> import os
>>>> os.fork()
? ? ? 3 [main] pypy-c 5672 fixup_mmaps_after_fork: ReadProcessMemory failed for MAP_PRIVATE address 0xB0010000, Win32 error 998
? ? 172 [main] pypy-c 5672 D:\pypy\pypy-jit\pypy\pypy\translator\goal\pypy-c: *** fatal error in forked process - recreate_mmaps_after_fork_failed
? ? 478 [main] pypy-c 5672 open_stackdumpfile: Dumping stack trace to pypy-c.stackdump
? ? ? 1 [main] pypy-c 6112 fork: child -1 - forked process 5672 died unexpectedly, retry 0, exit code 256, errno 11
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Traceback (most recent call last):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?File "<console>", line 1, in <module>
? ? ? ? ? ? ? ? ? ? ? ? ? ? OSError: [Errno 11] Resource temporarily unavailable
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>>>>?

PS Attached is an output of cygcheck, and the relevant portion of an strace.

Attachment: cygcheck.out
Description: Binary data

Attachment: test_os_fork_opt=jit.log
Description: Binary data

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]