clonly / pyv8

Automatically exported from code.google.com/p/pyv8
0 stars 0 forks source link

Segmentation Fault when working with Eventlet #50

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
import PyV8
import eventlet

class Global(PyV8.JSClass):
    def sleep(self, seconds):
        eventlet.sleep(seconds)

def run(n):
    with PyV8.JSContext(Global()) as ctx:
        return ctx.eval("sleep(2);")

pool = eventlet.GreenPool()
for result in pool.imap(run, xrange(5)):
    print result

What is the expected output? What do you see instead?
Expected:
None
None
None
None
None

Instead:
Segmentation Fault

What version of the product are you using? On what operating system?
Eventlet 0.9.7, PyV8 0.9, V8 2.2.9, Python 2.6.2, Ubuntu 9.04

Please provide any additional information below.
Strangely enough, if I compile the "sleep(2)", then run it, it works.  Only 
when I eval() something that would cause Eventlet to cooperatively yield 
does it segfault.

Original issue reported on code.google.com by andrew.r...@gmail.com on 14 May 2010 at 9:52

Attachments:

GoogleCodeExporter commented 9 years ago

Original comment by flier...@gmail.com on 14 May 2010 at 11:14

GoogleCodeExporter commented 9 years ago
Another note I should probably add,

Someone from Freenode #eventlet claims they are able to run the above example 
just 
fine on X86_64 with the PyV8 binaries.  I'm on i686 and have tried both the 
PyV8 
binaries and compiling from source, but I still get a segfault.

Original comment by andrew.r...@gmail.com on 14 May 2010 at 11:22

GoogleCodeExporter commented 9 years ago
I think the root cause is the eventlet base on the greenlet project, which 
seems use a 
customized python stack frame for the lightweight coroutine, which may conflict 
with 
pyv8's multi-thread support. So, I need more time to study the implement 
mechanism 
of greenlet.

Original comment by flier...@gmail.com on 16 May 2010 at 4:47

GoogleCodeExporter commented 9 years ago
Thanks for looking at it, flier.lu.  Are you able to reproduce it?

Original comment by andrew.r...@gmail.com on 16 May 2010 at 6:59

GoogleCodeExporter commented 9 years ago
Sure, that's why I believe it is a mechanism issue, pyv8's multi-threading 
support is 
not too sophisticated at this time.

Original comment by flier...@gmail.com on 17 May 2010 at 1:47