[Python-checkins] bpo-31403: Remove WITHOUT_THREADS from _decimal. (#3474)

Stefan Krah webhook-mailer at python.org
Sat Sep 9 13:26:25 EDT 2017


https://github.com/python/cpython/commit/c0c29dff7940b7e7ecc1dd051080c5d5f9e42ba8
commit: c0c29dff7940b7e7ecc1dd051080c5d5f9e42ba8
branch: master
author: Stefan Krah <skrah at bytereef.org>
committer: GitHub <noreply at github.com>
date: 2017-09-09T19:26:22+02:00
summary:

bpo-31403: Remove WITHOUT_THREADS from _decimal. (#3474)

files:
M Modules/_decimal/_decimal.c
M Modules/_decimal/tests/runall-memorydebugger.sh

diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c
index a6e365d4536..e3c1a7997fa 100644
--- a/Modules/_decimal/_decimal.c
+++ b/Modules/_decimal/_decimal.c
@@ -80,9 +80,7 @@ typedef struct {
     PyObject *traps;
     PyObject *flags;
     int capitals;
-#ifndef WITHOUT_THREADS
     PyThreadState *tstate;
-#endif
 } PyDecContextObject;
 
 typedef struct {
@@ -124,15 +122,10 @@ incr_false(void)
 }
 
 
-#ifdef WITHOUT_THREADS
-/* Default module context */
-static PyObject *module_context = NULL;
-#else
 /* Key for thread state dictionary */
 static PyObject *tls_context_key = NULL;
 /* Invariant: NULL or the most recently accessed thread local context */
 static PyDecContextObject *cached_context = NULL;
-#endif
 
 /* Template for creating new thread contexts, calling Context() without
  * arguments and initializing the module_context on first access. */
@@ -1219,9 +1212,7 @@ context_new(PyTypeObject *type, PyObject *args UNUSED, PyObject *kwds UNUSED)
     SdFlagAddr(self->flags) = &ctx->status;
 
     CtxCaps(self) = 1;
-#ifndef WITHOUT_THREADS
     self->tstate = NULL;
-#endif
 
     return (PyObject *)self;
 }
@@ -1229,11 +1220,10 @@ context_new(PyTypeObject *type, PyObject *args UNUSED, PyObject *kwds UNUSED)
 static void
 context_dealloc(PyDecContextObject *self)
 {
-#ifndef WITHOUT_THREADS
     if (self == cached_context) {
         cached_context = NULL;
     }
-#endif
+
     Py_XDECREF(self->traps);
     Py_XDECREF(self->flags);
     Py_TYPE(self)->tp_free(self);
@@ -1501,76 +1491,6 @@ static PyGetSetDef context_getsets [] =
 /*                Global, thread local and temporary contexts                 */
 /******************************************************************************/
 
-#ifdef WITHOUT_THREADS
-/* Return borrowed reference to the current context. When compiled
- * without threads, this is always the module context. */
-static int module_context_set = 0;
-static PyObject *
-current_context(void)
-{
-    /* In decimal.py, the module context is automatically initialized
-     * from the DefaultContext when it is first accessed. This
-     * complicates the code and has a speed penalty of 1-2%. */
-    if (module_context_set) {
-        return module_context;
-    }
-
-    *CTX(module_context) = *CTX(default_context_template);
-    CTX(module_context)->status = 0;
-    CTX(module_context)->newtrap = 0;
-    CtxCaps(module_context) = CtxCaps(default_context_template);
-
-    module_context_set = 1;
-    return module_context;
-}
-
-/* ctxobj := borrowed reference to the current context */
-#define CURRENT_CONTEXT(ctxobj) \
-    ctxobj = current_context()
-
-/* ctx := pointer to the mpd_context_t struct of the current context */
-#define CURRENT_CONTEXT_ADDR(ctx) \
-    ctx = CTX(current_context())
-
-/* Return a new reference to the current context */
-static PyObject *
-PyDec_GetCurrentContext(PyObject *self UNUSED, PyObject *args UNUSED)
-{
-    PyObject *context;
-
-    CURRENT_CONTEXT(context);
-
-    Py_INCREF(context);
-    return context;
-}
-
-/* Set the module context to a new context, decrement old reference */
-static PyObject *
-PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
-{
-    CONTEXT_CHECK(v);
-
-    /* If the new context is one of the templates, make a copy.
-     * This is the current behavior of decimal.py. */
-    if (v == default_context_template ||
-        v == basic_context_template ||
-        v == extended_context_template) {
-        v = context_copy(v, NULL);
-        if (v == NULL) {
-            return NULL;
-        }
-        CTX(v)->status = 0;
-    }
-    else {
-        Py_INCREF(v);
-    }
-
-    Py_XDECREF(module_context);
-    module_context = v;
-    module_context_set = 1;
-    Py_RETURN_NONE;
-}
-#else
 /*
  * Thread local storage currently has a speed penalty of about 4%.
  * All functions that map Python's arithmetic operators to mpdecimal
@@ -1713,7 +1633,6 @@ PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
     Py_DECREF(v);
     Py_RETURN_NONE;
 }
-#endif
 
 /* Context manager object for the 'with' statement. The manager
  * owns one reference to the global (outer) context and one
@@ -5840,17 +5759,9 @@ PyInit__decimal(void)
     CHECK_INT(PyModule_AddObject(m, "DefaultContext",
                                  default_context_template));
 
-#ifdef WITHOUT_THREADS
-    /* Init module context */
-    ASSIGN_PTR(module_context,
-               PyObject_CallObject((PyObject *)&PyDecContext_Type, NULL));
-    Py_INCREF(Py_False);
-    CHECK_INT(PyModule_AddObject(m, "HAVE_THREADS", Py_False));
-#else
     ASSIGN_PTR(tls_context_key, PyUnicode_FromString("___DECIMAL_CTX__"));
     Py_INCREF(Py_True);
     CHECK_INT(PyModule_AddObject(m, "HAVE_THREADS", Py_True));
-#endif
 
     /* Init basic context template */
     ASSIGN_PTR(basic_context_template,
@@ -5906,12 +5817,8 @@ PyInit__decimal(void)
     Py_CLEAR(MutableMapping); /* GCOV_NOT_REACHED */
     Py_CLEAR(SignalTuple); /* GCOV_NOT_REACHED */
     Py_CLEAR(DecimalTuple); /* GCOV_NOT_REACHED */
-#ifdef WITHOUT_THREADS
-    Py_CLEAR(module_context); /* GCOV_NOT_REACHED */
-#else
     Py_CLEAR(default_context_template); /* GCOV_NOT_REACHED */
     Py_CLEAR(tls_context_key); /* GCOV_NOT_REACHED */
-#endif
     Py_CLEAR(basic_context_template); /* GCOV_NOT_REACHED */
     Py_CLEAR(extended_context_template); /* GCOV_NOT_REACHED */
     Py_CLEAR(m); /* GCOV_NOT_REACHED */
diff --git a/Modules/_decimal/tests/runall-memorydebugger.sh b/Modules/_decimal/tests/runall-memorydebugger.sh
index a446fc8b97b..77c0c9cd82c 100755
--- a/Modules/_decimal/tests/runall-memorydebugger.sh
+++ b/Modules/_decimal/tests/runall-memorydebugger.sh
@@ -1,8 +1,8 @@
 #!/bin/sh
 
 #
-# Purpose: test with and without threads, all machine configurations, pydebug,
-#          refleaks, release build and release build with valgrind.
+# Purpose: test all machine configurations, pydebug, refleaks, release build
+#          and release build with valgrind.
 #
 # Synopsis: ./runall-memorydebugger.sh [--all-configs64 | --all-configs32]
 #
@@ -57,8 +57,7 @@ print_config ()
 cd ..
 
 # test_decimal: refleak, regular and Valgrind tests
-for args in "--without-threads" ""; do
-    for config in $CONFIGS; do
+for config in $CONFIGS; do
 
         unset PYTHON_DECIMAL_WITH_MACHINE
         libmpdec_config=$config
@@ -70,12 +69,12 @@ for args in "--without-threads" ""; do
         fi
 
         ############ refleak tests ###########
-        print_config "refleak tests: config=$config" $args
+        print_config "refleak tests: config=$config"
         printf "\nbuilding python ...\n\n"
 
         cd ../../
         $GMAKE distclean > /dev/null 2>&1
-        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug $args > /dev/null 2>&1
+        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug > /dev/null 2>&1
         $GMAKE | grep _decimal
 
         printf "\n\n# ======================== refleak tests ===========================\n\n"
@@ -83,11 +82,11 @@ for args in "--without-threads" ""; do
 
 
         ############ regular tests ###########
-        print_config "regular tests: config=$config" $args
+        print_config "regular tests: config=$config"
         printf "\nbuilding python ...\n\n"
 
         $GMAKE distclean > /dev/null 2>&1
-        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" $args > /dev/null 2>&1
+        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" > /dev/null 2>&1
         $GMAKE | grep _decimal
 
         printf "\n\n# ======================== regular tests ===========================\n\n"
@@ -104,23 +103,21 @@ for args in "--without-threads" ""; do
                   esac
         esac
 
-        print_config "valgrind tests: config=$config" $args
+        print_config "valgrind tests: config=$config"
         printf "\nbuilding python ...\n\n"
         $GMAKE distclean > /dev/null 2>&1
-        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc $args > /dev/null 2>&1
+        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc > /dev/null 2>&1
         $GMAKE | grep _decimal
 
         printf "\n\n# ======================== valgrind tests ===========================\n\n"
         $valgrind ./python -m test -uall test_decimal
 
         cd Modules/_decimal
-    done
 done
 
 # deccheck
 cd ../../
 for config in $CONFIGS; do
-    for args in "--without-threads" ""; do
 
         unset PYTHON_DECIMAL_WITH_MACHINE
         if [ X"$config" != X"auto" ]; then
@@ -129,22 +126,22 @@ for config in $CONFIGS; do
         fi
 
         ############ debug ############
-        print_config "deccheck: config=$config --with-pydebug" $args
+        print_config "deccheck: config=$config --with-pydebug"
         printf "\nbuilding python ...\n\n"
 
         $GMAKE distclean > /dev/null 2>&1
-        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug $args > /dev/null 2>&1
+        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug > /dev/null 2>&1
         $GMAKE | grep _decimal
 
         printf "\n\n# ========================== debug ===========================\n\n"
         ./python Modules/_decimal/tests/deccheck.py
 
         ########### regular ###########
-        print_config "deccheck: config=$config " $args
+        print_config "deccheck: config=$config "
         printf "\nbuilding python ...\n\n"
 
         $GMAKE distclean > /dev/null 2>&1
-        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" $args > /dev/null 2>&1
+        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" > /dev/null 2>&1
         $GMAKE | grep _decimal
 
         printf "\n\n# ======================== regular ===========================\n\n"
@@ -160,16 +157,15 @@ for config in $CONFIGS; do
                   esac
         esac
 
-        print_config "valgrind deccheck: config=$config " $args
+        print_config "valgrind deccheck: config=$config "
         printf "\nbuilding python ...\n\n"
 
         $GMAKE distclean > /dev/null 2>&1
-        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc $args > /dev/null 2>&1
+        ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc > /dev/null 2>&1
         $GMAKE | grep _decimal
 
         printf "\n\n# ======================== valgrind ==========================\n\n"
         $valgrind ./python Modules/_decimal/tests/deccheck.py
-    done
 done
 
 



More information about the Python-checkins mailing list