summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/DocXMLRPCServer.py3
-rw-r--r--Lib/idlelib/FormatParagraph.py1
-rw-r--r--Lib/test/test_float.py3
-rw-r--r--Misc/ACKS1
-rw-r--r--Modules/signalmodule.c31
-rw-r--r--Objects/floatobject.c13
-rw-r--r--PCbuild/pythoncore.vcproj3
-rw-r--r--PCbuild8/pythoncore/pythoncore.vcproj4
-rw-r--r--PCbuild9/pythoncore.vcproj4
9 files changed, 54 insertions, 9 deletions
diff --git a/Lib/DocXMLRPCServer.py b/Lib/DocXMLRPCServer.py
index 86c7bfb..504b669 100644
--- a/Lib/DocXMLRPCServer.py
+++ b/Lib/DocXMLRPCServer.py
@@ -123,8 +123,7 @@ class ServerHTMLDoc(pydoc.HTMLDoc):
result = result + '<p>%s</p>\n' % doc
contents = []
- method_items = list(methods.items())
- method_items.sort()
+ method_items = sorted(methods.items())
for key, value in method_items:
contents.append(self.docroutine(value, key, funcs=fdict))
result = result + self.bigsection(
diff --git a/Lib/idlelib/FormatParagraph.py b/Lib/idlelib/FormatParagraph.py
index 9b4b3cb..02f96d4 100644
--- a/Lib/idlelib/FormatParagraph.py
+++ b/Lib/idlelib/FormatParagraph.py
@@ -75,6 +75,7 @@ class FormatParagraph:
else:
text.mark_set("insert", last)
text.see("insert")
+ return "break"
def find_paragraph(text, mark):
lineno, col = map(int, mark.split("."))
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index 2ba6dbc..922de7a 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -166,7 +166,8 @@ def test_main():
UnknownFormatTestCase,
IEEEFormatTestCase,
FormatTestCase,
- ReprTestCase)
+ #ReprTestCase
+ )
if __name__ == '__main__':
test_main()
diff --git a/Misc/ACKS b/Misc/ACKS
index 26bbb0b..17ef503 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -225,6 +225,7 @@ Tadayoshi Funaba
Gyro Funch
Peter Funk
Geoff Furnish
+Ulisses Furquim
Lele Gaifax
Santiago Gala
Yitzchak Gale
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 5f38b9b..76c8198 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -75,7 +75,8 @@ static struct {
PyObject *func;
} Handlers[NSIG];
-static int is_tripped = 0; /* Speed up sigcheck() when none tripped */
+/* Speed up sigcheck() when none tripped */
+static volatile sig_atomic_t is_tripped = 0;
static PyObject *DefaultHandler;
static PyObject *IgnoreHandler;
@@ -122,8 +123,10 @@ signal_handler(int sig_num)
/* See NOTES section above */
if (getpid() == main_pid) {
#endif
- is_tripped++;
Handlers[sig_num].tripped = 1;
+ /* Set is_tripped after setting .tripped, as it gets
+ cleared in PyErr_CheckSignals() before .tripped. */
+ is_tripped = 1;
Py_AddPendingCall(checksignals_witharg, NULL);
#ifdef WITH_THREAD
}
@@ -597,13 +600,31 @@ PyErr_CheckSignals(void)
if (!is_tripped)
return 0;
+
#ifdef WITH_THREAD
if (PyThread_get_thread_ident() != main_thread)
return 0;
#endif
+
+ /*
+ * The is_stripped variable is meant to speed up the calls to
+ * PyErr_CheckSignals (both directly or via pending calls) when no
+ * signal has arrived. This variable is set to 1 when a signal arrives
+ * and it is set to 0 here, when we know some signals arrived. This way
+ * we can run the registered handlers with no signals blocked.
+ *
+ * NOTE: with this approach we can have a situation where is_tripped is
+ * 1 but we have no more signals to handle (Handlers[i].tripped
+ * is 0 for every signal i). This won't do us any harm (except
+ * we're gonna spent some cycles for nothing). This happens when
+ * we receive a signal i after we zero is_tripped and before we
+ * check Handlers[i].tripped.
+ */
+ is_tripped = 0;
+
if (!(f = (PyObject *)PyEval_GetFrame()))
f = Py_None;
-
+
for (i = 1; i < NSIG; i++) {
if (Handlers[i].tripped) {
PyObject *result = NULL;
@@ -621,7 +642,7 @@ PyErr_CheckSignals(void)
Py_DECREF(result);
}
}
- is_tripped = 0;
+
return 0;
}
@@ -632,7 +653,7 @@ PyErr_CheckSignals(void)
void
PyErr_SetInterrupt(void)
{
- is_tripped++;
+ is_tripped = 1;
Handlers[SIGINT].tripped = 1;
Py_AddPendingCall((int (*)(void *))PyErr_CheckSignals, NULL);
}
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index b17f7be..48d29d7 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -281,6 +281,7 @@ format_float(char *buf, size_t buflen, PyFloatObject *v, int precision)
format_double(buf, buflen, PyFloat_AS_DOUBLE(v), precision);
}
+#ifdef Py_BROKEN_REPR
/* The following function is based on Tcl_PrintDouble,
* from tclUtil.c.
*/
@@ -382,6 +383,8 @@ format_float_repr(char *buf, PyFloatObject *v)
format_double_repr(buf, PyFloat_AS_DOUBLE(v));
}
+#endif /* Py_BROKEN_REPR */
+
/* Macro and helper that convert PyObject obj to a C double and store
the value in dbl. If conversion to double raises an exception, obj is
set to NULL, and the function invoking this macro returns NULL. If
@@ -434,8 +437,14 @@ convert_to_double(PyObject **v, double *dbl)
static PyObject *
float_repr(PyFloatObject *v)
{
+#ifdef Py_BROKEN_REPR
char buf[30];
format_float_repr(buf, v);
+#else
+ char buf[100];
+ format_float(buf, sizeof(buf), v, PREC_REPR);
+#endif
+
return PyUnicode_FromString(buf);
}
@@ -1327,9 +1336,11 @@ _PyFloat_Init(void)
double_format = detected_double_format;
float_format = detected_float_format;
-
+
+#ifdef Py_BROKEN_REPR
/* Initialize floating point repr */
_PyFloat_DigitsInit();
+#endif
}
void
diff --git a/PCbuild/pythoncore.vcproj b/PCbuild/pythoncore.vcproj
index 326eacc..2ac8e25 100644
--- a/PCbuild/pythoncore.vcproj
+++ b/PCbuild/pythoncore.vcproj
@@ -487,6 +487,9 @@
<File
RelativePath="..\Objects\dictobject.c">
</File>
+ <!--File
+ RelativePath="..\Objects\doubledigits.c">
+ </File-->
<File
RelativePath="..\Objects\doubledigits.c">
</File>
diff --git a/PCbuild8/pythoncore/pythoncore.vcproj b/PCbuild8/pythoncore/pythoncore.vcproj
index 9a848d7..1a78022 100644
--- a/PCbuild8/pythoncore/pythoncore.vcproj
+++ b/PCbuild8/pythoncore/pythoncore.vcproj
@@ -827,6 +827,10 @@
RelativePath="..\..\Objects\dictobject.c"
>
</File>
+ <!--File
+ RelativePath="..\..\Objects\doubledigits.c"
+ >
+ </File-->
<File
RelativePath="..\..\Objects\doubledigits.c"
>
diff --git a/PCbuild9/pythoncore.vcproj b/PCbuild9/pythoncore.vcproj
index 646cb4f..42eaa2e 100644
--- a/PCbuild9/pythoncore.vcproj
+++ b/PCbuild9/pythoncore.vcproj
@@ -1362,6 +1362,10 @@
RelativePath="..\Objects\dictobject.c"
>
</File>
+ <!--File
+ RelativePath="..\Objects\doubledigits.c"
+ >
+ </File-->
<File
RelativePath="..\Objects\doubledigits.c"
>