[vim] - patchlevel 808
Karsten Hopp
karsten at fedoraproject.org
Mon Feb 18 13:38:54 UTC 2013
commit ab8882d30829360139584db0426f25cfb589a97a
Author: Karsten Hopp <karsten at redhat.com>
Date: Mon Feb 18 15:38:00 2013 +0100
- patchlevel 808
7.3.808 | 289 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 289 insertions(+), 0 deletions(-)
---
diff --git a/7.3.808 b/7.3.808
new file mode 100644
index 0000000..a63e773
--- /dev/null
+++ b/7.3.808
@@ -0,0 +1,289 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.808
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.808
+Problem: Python threads still do not work properly.
+Solution: Fix both Python 2 and 3. Add tests. (Ken Takata)
+Files: src/if_python.c, src/if_python3.c, src/testdir/test86.in,
+ src/testdir/test86.ok, src/testdir/test87.in,
+ src/testdir/test87.ok
+
+
+*** ../vim-7.3.807/src/if_python.c 2013-01-30 11:44:33.000000000 +0100
+--- src/if_python.c 2013-02-13 14:07:28.000000000 +0100
+***************
+*** 741,747 ****
+ PyMac_Initialize();
+ #endif
+ /* Initialise threads, and below save the state using
+! * PyGILState_Ensure. Without the call to PyGILState_Ensure, thread
+ * specific state (such as the system trace hook), will be lost
+ * between invocations of Python code. */
+ PyEval_InitThreads();
+--- 741,747 ----
+ PyMac_Initialize();
+ #endif
+ /* Initialise threads, and below save the state using
+! * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread
+ * specific state (such as the system trace hook), will be lost
+ * between invocations of Python code. */
+ PyEval_InitThreads();
+***************
+*** 755,764 ****
+ if (PythonMod_Init())
+ goto fail;
+
+- /* The first python thread is vim's, release the lock. */
+- Python_SaveThread();
+- pygilstate = PyGILState_Ensure();
+-
+ globals = PyModule_GetDict(PyImport_AddModule("__main__"));
+
+ /* Remove the element from sys.path that was added because of our
+--- 755,760 ----
+***************
+*** 767,773 ****
+ * the current directory in sys.path. */
+ PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
+
+! PyGILState_Release(pygilstate);
+
+ initialised = 1;
+ }
+--- 763,776 ----
+ * the current directory in sys.path. */
+ PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
+
+! /* lock is created and acquired in PyEval_InitThreads() and thread
+! * state is created in Py_Initialize()
+! * there _PyGILState_NoteThreadState() also sets gilcounter to 1
+! * (python must have threads enabled!)
+! * so the following does both: unlock GIL and save thread state in TLS
+! * without deleting thread state
+! */
+! PyEval_SaveThread();
+
+ initialised = 1;
+ }
+*** ../vim-7.3.807/src/if_python3.c 2012-11-28 15:33:10.000000000 +0100
+--- src/if_python3.c 2013-02-13 14:07:28.000000000 +0100
+***************
+*** 729,741 ****
+ #else
+ PyMac_Initialize();
+ #endif
+! /* Initialise threads, and save the state using PyGILState_Ensure.
+! * Without the call to PyGILState_Ensure, thread specific state (such
+! * as the system trace hook), will be lost between invocations of
+! * Python code. */
+ PyEval_InitThreads();
+- pygilstate = PyGILState_Ensure();
+-
+ #ifdef DYNAMIC_PYTHON3
+ get_py3_exceptions();
+ #endif
+--- 729,739 ----
+ #else
+ PyMac_Initialize();
+ #endif
+! /* Initialise threads, and below save the state using
+! * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread
+! * specific state (such as the system trace hook), will be lost
+! * between invocations of Python code. */
+ PyEval_InitThreads();
+ #ifdef DYNAMIC_PYTHON3
+ get_py3_exceptions();
+ #endif
+***************
+*** 754,766 ****
+ */
+ PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
+
+! // lock is created and acquired in PyEval_InitThreads() and thread
+! // state is created in Py_Initialize()
+! // there _PyGILState_NoteThreadState() also sets gilcounter to 1
+! // (python must have threads enabled!)
+! // so the following does both: unlock GIL and save thread state in TLS
+! // without deleting thread state
+! PyGILState_Release(pygilstate);
+
+ py3initialised = 1;
+ }
+--- 752,765 ----
+ */
+ PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
+
+! /* lock is created and acquired in PyEval_InitThreads() and thread
+! * state is created in Py_Initialize()
+! * there _PyGILState_NoteThreadState() also sets gilcounter to 1
+! * (python must have threads enabled!)
+! * so the following does both: unlock GIL and save thread state in TLS
+! * without deleting thread state
+! */
+! PyEval_SaveThread();
+
+ py3initialised = 1;
+ }
+*** ../vim-7.3.807/src/testdir/test86.in 2012-09-21 14:00:05.000000000 +0200
+--- src/testdir/test86.in 2013-02-13 13:58:25.000000000 +0100
+***************
+*** 267,272 ****
+--- 267,320 ----
+ : $put =toput
+ : endtry
+ :endfor
++ :"
++ :" threading
++ :let l = [0]
++ :py l=vim.bindeval('l')
++ :py <<EOF
++ import threading
++ import time
++
++ class T(threading.Thread):
++ def __init__(self):
++ threading.Thread.__init__(self)
++ self.t = 0
++ self.running = True
++
++ def run(self):
++ while self.running:
++ self.t += 1
++ time.sleep(0.1)
++
++ t = T()
++ t.start()
++ EOF
++ :sleep 1
++ :py t.running = False
++ :py t.join()
++ :py l[0] = t.t > 8 # check if the background thread is working
++ :$put =string(l)
++ :"
++ :" settrace
++ :let l = []
++ :py l=vim.bindeval('l')
++ :py <<EOF
++ import sys
++
++ def traceit(frame, event, arg):
++ global l
++ if event == "line":
++ l.extend([frame.f_lineno])
++ return traceit
++
++ def trace_main():
++ for i in range(5):
++ pass
++ EOF
++ :py sys.settrace(traceit)
++ :py trace_main()
++ :py sys.settrace(None)
++ :$put =string(l)
+ :endfun
+ :"
+ :call Test()
+*** ../vim-7.3.807/src/testdir/test86.ok 2012-09-21 14:00:05.000000000 +0200
+--- src/testdir/test86.ok 2013-02-13 13:58:25.000000000 +0100
+***************
+*** 63,65 ****
+--- 63,67 ----
+ {"\0": 1}: Vim(let):E859:
+ undefined_name: Vim(let):E858:
+ vim: Vim(let):E859:
++ [1]
++ [1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
+*** ../vim-7.3.807/src/testdir/test87.in 2012-09-21 14:00:05.000000000 +0200
+--- src/testdir/test87.in 2013-02-13 13:58:25.000000000 +0100
+***************
+*** 267,272 ****
+--- 267,320 ----
+ : $put =toput
+ : endtry
+ :endfor
++ :"
++ :" threading
++ :let l = [0]
++ :py3 l=vim.bindeval('l')
++ :py3 <<EOF
++ import threading
++ import time
++
++ class T(threading.Thread):
++ def __init__(self):
++ threading.Thread.__init__(self)
++ self.t = 0
++ self.running = True
++
++ def run(self):
++ while self.running:
++ self.t += 1
++ time.sleep(0.1)
++
++ t = T()
++ t.start()
++ EOF
++ :sleep 1
++ :py3 t.running = False
++ :py3 t.join()
++ :py3 l[0] = t.t > 8 # check if the background thread is working
++ :$put =string(l)
++ :"
++ :" settrace
++ :let l = []
++ :py3 l=vim.bindeval('l')
++ :py3 <<EOF
++ import sys
++
++ def traceit(frame, event, arg):
++ global l
++ if event == "line":
++ l += [frame.f_lineno]
++ return traceit
++
++ def trace_main():
++ for i in range(5):
++ pass
++ EOF
++ :py3 sys.settrace(traceit)
++ :py3 trace_main()
++ :py3 sys.settrace(None)
++ :$put =string(l)
+ :endfun
+ :"
+ :call Test()
+*** ../vim-7.3.807/src/testdir/test87.ok 2012-09-21 14:00:05.000000000 +0200
+--- src/testdir/test87.ok 2013-02-13 13:58:25.000000000 +0100
+***************
+*** 63,65 ****
+--- 63,67 ----
+ {"\0": 1}: Vim(let):E861:
+ undefined_name: Vim(let):E860:
+ vim: Vim(let):E861:
++ [1]
++ [1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
+*** ../vim-7.3.807/src/version.c 2013-02-13 12:15:59.000000000 +0100
+--- src/version.c 2013-02-13 14:10:53.000000000 +0100
+***************
+*** 727,728 ****
+--- 727,730 ----
+ { /* Add new patch number below this line */
++ /**/
++ 808,
+ /**/
+
+--
+Lawmakers made it obligatory for everybody to take at least one bath
+each week -- on Saturday night.
+ [real standing law in Vermont, United States of America]
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
More information about the scm-commits
mailing list