Steps to reproduce:
  $ cat a.vim
  function! Foo()
    py3 vim.command("py3 0")
  endfunction
  py3 import vim
  py3 vim.bindeval('function("Foo")')()

  $ vim -u NONE -N
  :so a.vim
  Vim: Caught deadly signal ABRT

  Same problem with :py.


Backtrace is

#0  0x00007ffff509c425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff509fb8b in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007fffef02e687 in Py_FatalError (
    msg=0x7fffef130bf0 "PyThreadState_Get: no current thread")
    at ../Python/pythonrun.c:2187
#3  0x00007fffef027c18 in PyThreadState_Get () at ../Python/pystate.c:382
#4  0x00007fffeeef0c06 in PyObject_Call (func=0xb47ee0, arg=0x7ffff7f64060,
    kw=0x0) at ../Objects/abstract.c:2150
#5  0x00007fffeeff7433 in do_call (func=0xb47ee0, pp_stack=0x7fffffffc0a8,
    na=0, nk=0) at ../Python/ceval.c:4141
#6  0x00007fffeeff6758 in call_function (pp_stack=0x7fffffffc0a8, oparg=0)
    at ../Python/ceval.c:3944
#7  0x00007fffeeff0663 in PyEval_EvalFrameEx (f=0x9c8bd0, throwflag=0)
    at ../Python/ceval.c:2692
#8  0x00007fffeeff44a8 in PyEval_EvalCodeEx (_co=0x7fffeec7f490,
    globals=0x93a920, locals=0x93a920, args=0x0, argcount=0, kws=0x0,
    kwcount=0, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0)
    at ../Python/ceval.c:3350
#9  0x00007fffeefe343d in PyEval_EvalCode (co=0x7fffeec7f490,
    globals=0x93a920, locals=0x93a920) at ../Python/ceval.c:767
#10 0x00007fffef02d84b in run_mod (mod=0x9c69c0,
    filename=0x7fffef131622 "<string>", globals=0x93a920, locals=0x93a920,
    flags=0x0, arena=0xaaab10) at ../Python/pythonrun.c:1828
#11 0x00007fffef02d53f in PyRun_StringFlags (
    str=0xd43958 "vim.bindeval('function(\"Foo\")')()", start=257,
    globals=0x93a920, locals=0x93a920, flags=0x0) at
../Python/pythonrun.c:1762
#12 0x00007fffef02b999 in PyRun_SimpleStringFlags (
    command=0xd43958 "vim.bindeval('function(\"Foo\")')()", flags=0x0)
    at ../Python/pythonrun.c:1324
#13 0x00007fffef02eccf in PyRun_SimpleString (
    s=0xd43958 "vim.bindeval('function(\"Foo\")')()")
    at ../Python/pythonrun.c:2516
#14 0x00000000005e37bb in DoPy3Command (eap=0x7fffffffcc40,
    cmd=0x8ace64 "vim.bindeval('function(\"Foo\")')()", rettv=0x0)
    at if_python3.c:841
#15 0x00000000005e39e8 in ex_py3 (eap=0x7fffffffcc40) at if_python3.c:896
#16 0x00000000004718c7 in do_one_cmd (cmdlinep=0x7fffffffcd60, sourcing=1,
    cstack=0x7fffffffce50, fgetline=0x46cfc6 <getsourceline>,
    cookie=0x7fffffffd3b0) at ex_docmd.c:2684
#17 0x000000000046ee2c in do_cmdline (cmdline=0x8c6750 "function! Foo()",
    fgetline=0x46cfc6 <getsourceline>, cookie=0x7fffffffd3b0, flags=7)
    at ex_docmd.c:1122
#18 0x000000000046cbcc in do_source (fname=0x8ba023 "a.vim", check_other=0,
    is_vimrc=0) at ex_cmds2.c:3260
#19 0x000000000046c204 in cmd_source (fname=0x8ba023 "a.vim",
    eap=0x7fffffffd5d0) at ex_cmds2.c:2869
#20 0x000000000046c151 in ex_source (eap=0x7fffffffd5d0) at ex_cmds2.c:2842
#21 0x00000000004718c7 in do_one_cmd (cmdlinep=0x7fffffffd6f0, sourcing=0,
    cstack=0x7fffffffd7e0, fgetline=0x487955 <getexline>, cookie=0x0)
    at ex_docmd.c:2684
#22 0x000000000046ee2c in do_cmdline (cmdline=0x0,
    fgetline=0x487955 <getexline>, cookie=0x0, flags=0) at ex_docmd.c:1122
#23 0x00000000004ffa3e in nv_colon (cap=0x7fffffffdd60) at normal.c:5452
#24 0x00000000004f855e in normal_cmd (oap=0x7fffffffde00, toplevel=1)
    at normal.c:1199
#25 0x00000000005edc04 in main_loop (cmdwin=0, noexmode=0) at main.c:1322
#26 0x00000000005ed510 in main (argc=4, argv=0x7fffffffe108) at main.c:1013



PyGILState_Ensure/Release are misused.  pygilstate should be local variable.
I'm not sure if this is correct, but the attached patch seems to work.
Please check it.

-- 
Yukihiro Nakadaira - [email protected]

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Attachment: if_py.diff
Description: Binary data

Raspunde prin e-mail lui