[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