From 2294c0d4ecd81d01ddf741fff02cc04bd8de0638 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Wed, 12 Feb 2003 23:02:21 +0000 Subject: [PATCH] Cleanup from patch #683257: Add missing INCREFs and re-indent returns to be consistent. Add \n\ for lines in docstring Add a pathetic test Add docs --- Doc/lib/libimp.tex | 13 +++++++++++++ Lib/test/test_imp.py | 26 ++++++++++++++++++++++++++ Python/import.c | 11 +++++++---- 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 Lib/test/test_imp.py diff --git a/Doc/lib/libimp.tex b/Doc/lib/libimp.tex index 150f5b42021..31368f43c6e 100644 --- a/Doc/lib/libimp.tex +++ b/Doc/lib/libimp.tex @@ -106,6 +106,19 @@ the process of completing its import (and the imports, if any, triggered by that). \end{funcdesc} +\begin{funcdesc}{acquire_lock}{} +Acquires the interpreter's import lock for the current thread. This lock +should be used by import hooks to ensure thread-safety when importing modules. +On platforms without threads, this function does nothing. +\versionadded{2.3} +\end{funcdesc} + +\begin{funcdesc}{release_lock}{} +Release the interpreter's import lock. +On platforms without threads, this function does nothing. +\versionadded{2.3} +\end{funcdesc} + The following constants with integer values, defined in this module, are used to indicate the search result of \function{find_module()}. diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py new file mode 100644 index 00000000000..ebecf8203b3 --- /dev/null +++ b/Lib/test/test_imp.py @@ -0,0 +1,26 @@ + +import imp +import unittest +from test_support import TestFailed + +class ImpLock(unittest.TestCase): + + # XXX this test is woefully inadequate, please fix me + def testLock(self): + LOOPS = 50 + for i in range(LOOPS): + imp.acquire_lock() + for i in range(LOOPS): + imp.release_lock() + + for i in range(LOOPS): + try: + imp.release_lock() + except RuntimeError: + pass + else: + raise TestFailed, \ + "release_lock() without lock should raise RuntimeError" + +if __name__ == "__main__": + test_support.run_unittest(ImpLock) diff --git a/Python/import.c b/Python/import.c index f1d3d0cdf6b..07fff18d0b4 100644 --- a/Python/import.c +++ b/Python/import.c @@ -305,7 +305,8 @@ imp_acquire_lock(PyObject *self, PyObject *args) #ifdef WITH_THREAD lock_import(); #endif - return Py_None; + Py_INCREF(Py_None); + return Py_None; } static PyObject * @@ -320,7 +321,8 @@ imp_release_lock(PyObject *self, PyObject *args) return NULL; } #endif - return Py_None; + Py_INCREF(Py_None); + return Py_None; } /* Helper for sys */ @@ -2778,8 +2780,9 @@ On platforms without threads, return 0."); PyDoc_STRVAR(doc_acquire_lock, "acquire_lock() -> None\n\ -Acquires the interpreter's import lock for the current thread. This lock -should be used by import hooks to ensure thread-safety when importing modules. +Acquires the interpreter's import lock for the current thread.\n\ +This lock should be used by import hooks to ensure thread-safety\n\ +when importing modules.\n\ On platforms without threads, this function does nothing."); PyDoc_STRVAR(doc_release_lock,