diff --git a/.gitignore b/.gitignore index 81738c2..52ad492 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ greenlet-0.3.1.tar.gz /0.4.11.tar.gz /greenlet-0.4.12.tar.gz /greenlet-0.4.13.tar.gz +/greenlet-0.4.14.tar.gz diff --git a/0001-Don-t-clobber-r2-register-on-ppc64el.patch b/0001-Don-t-clobber-r2-register-on-ppc64el.patch deleted file mode 100644 index a4c935a..0000000 --- a/0001-Don-t-clobber-r2-register-on-ppc64el.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d32e64abf2443ada592f6a1e5d74bee35db0f221 Mon Sep 17 00:00:00 2001 -From: "Laszlo Boszormenyi (GCS)" -Date: Sat, 9 Sep 2017 07:57:16 +0000 -Subject: [PATCH] Don't clobber 'r2' register on ppc64el - -It was invalid even before, now GCC 7 no longer accept this. ---- - platform/switch_ppc64_linux.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/platform/switch_ppc64_linux.h b/platform/switch_ppc64_linux.h -index 0f20756..cd7d748 100644 ---- a/platform/switch_ppc64_linux.h -+++ b/platform/switch_ppc64_linux.h -@@ -56,7 +56,7 @@ - #define ALTIVEC_REGS - #endif - --#define REGS_TO_SAVE "r2", "r14", "r15", "r16", "r17", "r18", "r19", "r20", \ -+#define REGS_TO_SAVE "r14", "r15", "r16", "r17", "r18", "r19", "r20", \ - "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r31", \ - "fr14", "fr15", "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", \ - "fr22", "fr23", "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", \ --- -2.15.1 - diff --git a/132.patch b/132.patch deleted file mode 100644 index 54843a5..0000000 --- a/132.patch +++ /dev/null @@ -1,183 +0,0 @@ -From 8d998cb79ebea348a8f5258b642a1f772ecd93b8 Mon Sep 17 00:00:00 2001 -From: Victor Stinner -Date: Tue, 3 Jul 2018 16:01:37 +0200 -Subject: [PATCH] Fix #131: Port to Py3.7: handle tstate->exc_info - -Fix Python 3.7 support: handle also tstate->exc_info, not only -tstate->exc_state. ---- - greenlet.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-------------- - greenlet.h | 9 +++++++++ - 2 files changed, 59 insertions(+), 14 deletions(-) - -diff --git a/greenlet.c b/greenlet.c -index 0c85dd8..541efda 100644 ---- a/greenlet.c -+++ b/greenlet.c -@@ -153,6 +153,21 @@ static PyObject* ts_empty_dict; - #define GREENLET_tp_is_gc 0 - #endif /* !GREENLET_USE_GC */ - -+static void green_clear_exc(PyGreenlet *g) -+{ -+#ifdef GREENLET_USE_EXC_INFO -+ g->exc_info = NULL; -+ g->exc_state.exc_type = NULL; -+ g->exc_state.exc_value = NULL; -+ g->exc_state.exc_traceback = NULL; -+ g->exc_state.previous_item = NULL; -+#else -+ g->exc_type = NULL; -+ g->exc_value = NULL; -+ g->exc_traceback = NULL; -+#endif -+} -+ - static PyGreenlet* green_create_main(void) - { - PyGreenlet* gmain; -@@ -460,10 +475,9 @@ static int g_switchstack(void) - PyThreadState* tstate = PyThreadState_GET(); - current->recursion_depth = tstate->recursion_depth; - current->top_frame = tstate->frame; --#if PY_VERSION_HEX >= 0x030700A3 -- current->exc_type = tstate->exc_state.exc_type; -- current->exc_value = tstate->exc_state.exc_value; -- current->exc_traceback = tstate->exc_state.exc_traceback; -+#ifdef GREENLET_USE_EXC_INFO -+ current->exc_info = tstate->exc_info; -+ current->exc_state = tstate->exc_state; - #else - current->exc_type = tstate->exc_type; - current->exc_value = tstate->exc_value; -@@ -474,9 +488,13 @@ static int g_switchstack(void) - if (err < 0) { /* error */ - PyGreenlet* current = ts_current; - current->top_frame = NULL; -+#ifdef GREENLET_USE_EXC_INFO -+ green_clear_exc(current); -+#else - current->exc_type = NULL; - current->exc_value = NULL; - current->exc_traceback = NULL; -+#endif - - assert(ts_origin == NULL); - ts_target = NULL; -@@ -488,18 +506,20 @@ static int g_switchstack(void) - tstate->recursion_depth = target->recursion_depth; - tstate->frame = target->top_frame; - target->top_frame = NULL; --#if PY_VERSION_HEX >= 0x030700A3 -- tstate->exc_state.exc_type = target->exc_type; -- tstate->exc_state.exc_value = target->exc_value; -- tstate->exc_state.exc_traceback = target->exc_traceback; -+#ifdef GREENLET_USE_EXC_INFO -+ tstate->exc_state = target->exc_state; -+ if (target->exc_info != NULL) { -+ tstate->exc_info = target->exc_info; -+ } -+ else { -+ tstate->exc_info = &tstate->exc_state; -+ } - #else - tstate->exc_type = target->exc_type; - tstate->exc_value = target->exc_value; - tstate->exc_traceback = target->exc_traceback; - #endif -- target->exc_type = NULL; -- target->exc_value = NULL; -- target->exc_traceback = NULL; -+ green_clear_exc(target); - - assert(ts_origin == NULL); - Py_INCREF(target); -@@ -752,9 +772,7 @@ static int GREENLET_NOINLINE(g_initialstub)(void* mark) - self->stack_prev = ts_current; - } - self->top_frame = NULL; -- self->exc_type = NULL; -- self->exc_value = NULL; -- self->exc_traceback = NULL; -+ green_clear_exc(self); - self->recursion_depth = PyThreadState_GET()->recursion_depth; - - /* restore arguments in case they are clobbered */ -@@ -935,9 +953,15 @@ green_traverse(PyGreenlet *self, visitproc visit, void *arg) - - frames are not visited: alive greenlets are not garbage collected anyway */ - Py_VISIT((PyObject*)self->parent); - Py_VISIT(self->run_info); -+#ifdef GREENLET_USE_EXC_INFO -+ Py_VISIT(self->exc_state.exc_type); -+ Py_VISIT(self->exc_state.exc_value); -+ Py_VISIT(self->exc_state.exc_traceback); -+#else - Py_VISIT(self->exc_type); - Py_VISIT(self->exc_value); - Py_VISIT(self->exc_traceback); -+#endif - Py_VISIT(self->dict); - return 0; - } -@@ -961,9 +985,15 @@ static int green_clear(PyGreenlet* self) - so even if it switches we are relatively safe. */ - Py_CLEAR(self->parent); - Py_CLEAR(self->run_info); -+#ifdef GREENLET_USE_EXC_INFO -+ Py_CLEAR(self->exc_state.exc_type); -+ Py_CLEAR(self->exc_state.exc_value); -+ Py_CLEAR(self->exc_state.exc_traceback); -+#else - Py_CLEAR(self->exc_type); - Py_CLEAR(self->exc_value); - Py_CLEAR(self->exc_traceback); -+#endif - Py_CLEAR(self->dict); - return 0; - } -@@ -1030,9 +1060,15 @@ static void green_dealloc(PyGreenlet* self) - PyObject_ClearWeakRefs((PyObject *) self); - Py_CLEAR(self->parent); - Py_CLEAR(self->run_info); -+#ifdef GREENLET_USE_EXC_INFO -+ Py_CLEAR(self->exc_state.exc_type); -+ Py_CLEAR(self->exc_state.exc_value); -+ Py_CLEAR(self->exc_state.exc_traceback); -+#else - Py_CLEAR(self->exc_type); - Py_CLEAR(self->exc_value); - Py_CLEAR(self->exc_traceback); -+#endif - Py_CLEAR(self->dict); - Py_TYPE(self)->tp_free((PyObject*) self); - } -diff --git a/greenlet.h b/greenlet.h -index 6c9b8ee..995f500 100644 ---- a/greenlet.h -+++ b/greenlet.h -@@ -13,6 +13,10 @@ extern "C" { - - #define GREENLET_VERSION "0.4.13" - -+#if PY_VERSION_HEX >= 0x030700A3 -+# define GREENLET_USE_EXC_INFO -+#endif -+ - typedef struct _greenlet { - PyObject_HEAD - char* stack_start; -@@ -25,9 +29,14 @@ typedef struct _greenlet { - struct _frame* top_frame; - int recursion_depth; - PyObject* weakreflist; -+#ifdef GREENLET_USE_EXC_INFO -+ _PyErr_StackItem *exc_info; -+ _PyErr_StackItem exc_state; -+#else - PyObject* exc_type; - PyObject* exc_value; - PyObject* exc_traceback; -+#endif - PyObject* dict; - } PyGreenlet; - diff --git a/python-greenlet.spec b/python-greenlet.spec index 39fd7dd..243a628 100644 --- a/python-greenlet.spec +++ b/python-greenlet.spec @@ -1,18 +1,12 @@ %global modname greenlet Name: python-%{modname} -Version: 0.4.13 -Release: 5%{?dist} +Version: 0.4.14 +Release: 1%{?dist} Summary: Lightweight in-process concurrent programming License: MIT URL: https://github.com/python-greenlet/greenlet Source0: %{url}/archive/%{version}/%{modname}-%{version}.tar.gz -# https://github.com/python-greenlet/greenlet/pull/120 -Patch0001: 0001-Don-t-clobber-r2-register-on-ppc64el.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1594248 -Patch0002: https://github.com/python-greenlet/greenlet/pull/132.patch - BuildRequires: gcc-c++ %global _description \ @@ -97,6 +91,10 @@ Python 3 version. %{_includedir}/python%{python3_version}*/%{modname}/ %changelog +* Wed Jul 18 2018 Kevin Fenzi - 0.4.14-1 +- Update to 0.4.14. +- Drop upstreamed/no longer needed patches. + * Sat Jul 14 2018 Fedora Release Engineering - 0.4.13-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild diff --git a/sources b/sources index 6a2acce..a5d1f14 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (greenlet-0.4.13.tar.gz) = 883062b28c5df62bd34eef427406af2646048d3a6a2acefff81c0d5e280f8a189006e7e376bcc97b0dc313b8ffc975c6bc4f2d1637393c24b41c0e9c1790c26a +SHA512 (greenlet-0.4.14.tar.gz) = c86802a0df56b78482b029a0eaf624ca8f14d0e704480b30a8a35e343b3e4a16e80b6f169a970a39935b39d56aafc25bada0738199818b5892ca398a809d54ef