> On Aug 13, 2016, at 14:57, Dmitry Nezhevenko <d...@dion.org.ua> wrote:
> 
> On Fri, Aug 12, 2016 at 11:59:00PM -0700, Andi Vajda wrote:
>>> 
>>> and it still crashes. Playing with -Xmx -Xms, -Xss doesn't help at all.
>>> 
>>> Any suggestions about cause of this and possible solution?
>> 
>> No one replied to your question so far. I don't have much to add since I
>> have no access to your platform and can't reproduce any of this to debug it.
>> It looks like the symptoms you describe could hint at a version mismatch
>> between the headers you use to compile (and the libs to link) and then the
>> ones you use at runtime. Maybe version skew or 32-bit vs 64-bit (?) or
>> different frameworks.
>> Sorry for not having anything more useful to say.
>> 
>> Andi..
> 
> Well. I'm pretty sure that this is not header/version mismatch. Because it
> happens in isolated environment with only one JDK installed.
> 
> I've replaced jcc.__main__ entry point with wrapper that creates child
> process and passes args to it via stdin instead of sys.argv and it works.
> 
> I was able to build pylucene with such wrapper and it passes all tests. So
> I'm pretty sure that it's not header/binary mismatch. Because in such code
> should crash somewhere else. 
> 
> From my point of view it's stack size limit or something like this.
> 
> In any case thanks for you reply. I've working workaround. I know that
> pylucene currently lacks development effort, so this probably will not be
> fixed.

If you send in a patch that fixes it, it mught be :-)

Andi..

> 
> In any case if you have time and want to take a look, I can prepare qemu VM
> that reproduces it. 
> 
> Code that I've used:
> 
> # Usage: replace jcc calls with wrapper call:
> #
> # Before:
> #   python2.7 -m jcc.__main__ --jar file1.jar ... --build
> #
> # After:
> #   debian/jcc_wrapper python2.7 -m jcc.__main__ --jar file1.jar ... --build
> #
> # jcc_wrapper will read all arguments from sys.argv, invoke itself with 
> --stdin arg and
> # pass parameters to JCC without touching of sys.argv
> 
> import os
> import sys
> import subprocess
> 
> if len(sys.argv) > 1 and sys.argv[1] == '--stdin':
>    # Child process. Read options and call jcc
>    args = sys.stdin.read().split('\n')
> 
>    # Get rid of -m jcc.__main__ (expected to be first two args)
>    if len(args) > 2 and args[1] == '-m':
>        del args[1:3]
> 
>    # python -m jcc fills sys.argv[0] with path to module. Emulate this
>    import jcc
>    args[0] = os.path.join(jcc.__path__[0], '__main__.py')
> 
>    from jcc import cpp
>    cpp.jcc(args)
> else:
>    # parent process. Read opts, and pass them to child
>    # expected args: jcc_wrapper python2.7 -m jcc.__main__ ...
>    proc = subprocess.Popen([sys.argv[1], sys.argv[0], '--stdin'], 
> stdin=subprocess.PIPE)
>    proc.stdin.write('\n'.join(sys.argv[1:]))
>    proc.stdin.close()
>    sys.exit(proc.wait())
> 
> -- 
> WBR, Dmitry

Reply via email to