From 54d25f3be02aee857f2a5508b677f9a4c4341c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= Date: Fri, 18 Jan 2013 13:53:55 +0000 Subject: [PATCH 1/5] update to 0.4.0 --- .gitignore | 1 + get-rid-of-ts_origin.patch | 106 ------------------------------------- i686-register-fixes.patch | 62 ---------------------- ppc64-support.patch | 104 ------------------------------------ python-greenlet.spec | 25 +++------ sources | 2 +- 6 files changed, 9 insertions(+), 291 deletions(-) delete mode 100644 get-rid-of-ts_origin.patch delete mode 100644 i686-register-fixes.patch delete mode 100644 ppc64-support.patch diff --git a/.gitignore b/.gitignore index bda0572..39f4c4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ greenlet-0.3.1.tar.gz +/greenlet-0.4.0.zip diff --git a/get-rid-of-ts_origin.patch b/get-rid-of-ts_origin.patch deleted file mode 100644 index 0840b5f..0000000 --- a/get-rid-of-ts_origin.patch +++ /dev/null @@ -1,106 +0,0 @@ -diff -up greenlet-0.3.1/greenlet.c.get-rid-of-ts_origin greenlet-0.3.1/greenlet.c ---- greenlet-0.3.1/greenlet.c.get-rid-of-ts_origin 2010-04-05 17:24:25.000000000 -0400 -+++ greenlet-0.3.1/greenlet.c 2011-10-19 13:59:30.485035920 -0400 -@@ -116,10 +116,8 @@ extern PyTypeObject PyGreenlet_Type; - - /* The current greenlet in this thread state (holds a reference) */ - static PyGreenlet* ts_current = NULL; --/* Holds a reference to the switching-from stack during the slp switch */ --static PyGreenlet* ts_origin = NULL; - /* Holds a reference to the switching-to stack during the slp switch */ --static PyGreenlet* ts_target = NULL; -+static PyGreenlet* volatile ts_target = NULL; - /* NULL if error, otherwise args tuple to pass around during slp switch */ - static PyObject* ts_passaround_args = NULL; - static PyObject* ts_passaround_kwargs = NULL; -@@ -257,6 +255,7 @@ static int g_save(PyGreenlet* g, char* s - static void slp_restore_state(void) - { - PyGreenlet* g = ts_target; -+ PyGreenlet* owner = ts_current; - - /* Restore the heap copy back into the C stack */ - if (g->stack_saved != 0) { -@@ -265,30 +264,32 @@ static void slp_restore_state(void) - g->stack_copy = NULL; - g->stack_saved = 0; - } -- if (ts_current->stack_stop == g->stack_stop) -- g->stack_prev = ts_current->stack_prev; -- else -- g->stack_prev = ts_current; -+ if (owner->stack_start == NULL) -+ owner = owner->stack_prev; /* greenlet is dying, skip it */ -+ while (owner && owner->stack_stop <= g->stack_stop) -+ owner = owner->stack_prev; /* find greenlet with more stack */ -+ g->stack_prev = owner; - } - - static int slp_save_state(char* stackref) - { - /* must free all the C stack up to target_stop */ - char* target_stop = ts_target->stack_stop; -- assert(ts_current->stack_saved == 0); -- if (ts_current->stack_start == NULL) -- ts_current = ts_current->stack_prev; /* not saved if dying */ -+ PyGreenlet* owner = ts_current; -+ assert(owner->stack_saved == 0); -+ if (owner->stack_start == NULL) -+ owner = owner->stack_prev; /* not saved if dying */ - else -- ts_current->stack_start = stackref; -+ owner->stack_start = stackref; - -- while (ts_current->stack_stop < target_stop) { -+ while (owner->stack_stop < target_stop) { - /* ts_current is entierely within the area to free */ -- if (g_save(ts_current, ts_current->stack_stop)) -+ if (g_save(owner, owner->stack_stop)) - return -1; /* XXX */ -- ts_current = ts_current->stack_prev; -+ owner = owner->stack_prev; - } -- if (ts_current != ts_target) { -- if (g_save(ts_current, target_stop)) -+ if (owner != ts_target) { -+ if (g_save(owner, target_stop)) - return -1; /* XXX */ - } - return 0; -@@ -337,11 +338,11 @@ static int g_switchstack(void) - */ - int err; - { /* save state */ -+ PyGreenlet* current = ts_current; - PyThreadState* tstate = PyThreadState_GET(); -- ts_current->recursion_depth = tstate->recursion_depth; -- ts_current->top_frame = tstate->frame; -+ current->recursion_depth = tstate->recursion_depth; -+ current->top_frame = tstate->frame; - } -- ts_origin = ts_current; - err = _PyGreenlet_slp_switch(); - if (err < 0) { /* error */ - Py_XDECREF(ts_passaround_args); -@@ -351,13 +352,15 @@ static int g_switchstack(void) - ts_passaround_kwargs = NULL; - } - else { -+ PyGreenlet* target = ts_target; -+ PyGreenlet* origin = ts_current; - PyThreadState* tstate = PyThreadState_GET(); -- tstate->recursion_depth = ts_target->recursion_depth; -- tstate->frame = ts_target->top_frame; -- ts_target->top_frame = NULL; -- ts_current = ts_target; -- Py_INCREF(ts_target); -- Py_DECREF(ts_origin); -+ tstate->recursion_depth = target->recursion_depth; -+ tstate->frame = target->top_frame; -+ target->top_frame = NULL; -+ ts_current = target; -+ Py_INCREF(target); -+ Py_DECREF(origin); - } - return err; - } diff --git a/i686-register-fixes.patch b/i686-register-fixes.patch deleted file mode 100644 index b7a26d0..0000000 --- a/i686-register-fixes.patch +++ /dev/null @@ -1,62 +0,0 @@ -# HG changeset patch -# User Alexey Borzenkov -# Date 1313701525 -14400 -# Node ID 25bf29f4d3b79b026c1c05787bb741a8e7ef2229 -# Parent c0bf397a723d4b61d7ef78cf575dea4c0fdb527e -Fix compilation and register problems on some i386 configurations - -diff -r c0bf397a723d4b61d7ef78cf575dea4c0fdb527e -r 25bf29f4d3b79b026c1c05787bb741a8e7ef2229 platform/switch_x86_unix.h ---- a/platform/switch_x86_unix.h Thu Aug 18 02:44:20 2011 +0400 -+++ b/platform/switch_x86_unix.h Fri Aug 19 01:05:25 2011 +0400 -@@ -2,6 +2,8 @@ - * this is the internal transfer function. - * - * HISTORY -+ * 19-Aug-11 Alexey Borzenkov -+ * Correctly save ebp, ebx and cw - * 07-Sep-05 (py-dev mailing list discussion) - * removed 'ebx' from the register-saved. !!!! WARNING !!!! - * It means that this file can no longer be compiled statically! -@@ -34,18 +36,13 @@ - static int - slp_switch(void) - { -+ void *ebp, *ebx; -+ unsigned short cw; - register int *stackref, stsizediff; -- /* !!!!WARNING!!!! need to add "ebx" in the next line, as well as in the -- * last line of this function, if this header file is meant to be compiled -- * non-dynamically! -- */ -- __asm__ volatile ("" : : : -- "esi", -- "edi" --#ifdef __MINGW32__ -- , "ebx" --#endif -- ); -+ __asm__ volatile ("" : : : "esi", "edi"); -+ __asm__ volatile ("fstcw %0" : "=m" (cw)); -+ __asm__ volatile ("movl %%ebp, %0" : "=m" (ebp)); -+ __asm__ volatile ("movl %%ebx, %0" : "=m" (ebx)); - __asm__ ("movl %%esp, %0" : "=g" (stackref)); - { - SLP_SAVE_STATE(stackref, stsizediff); -@@ -57,13 +54,10 @@ - ); - SLP_RESTORE_STATE(); - } -- __asm__ volatile ("" : : : -- "esi", -- "edi" --#ifdef __MINGW32__ -- , "ebx" --#endif -- ); -+ __asm__ volatile ("movl %0, %%ebx" : : "m" (ebx)); -+ __asm__ volatile ("movl %0, %%ebp" : : "m" (ebp)); -+ __asm__ volatile ("fldcw %0" : : "m" (cw)); -+ __asm__ volatile ("" : : : "esi", "edi"); - return 0; - } - diff --git a/ppc64-support.patch b/ppc64-support.patch deleted file mode 100644 index 6326228..0000000 --- a/ppc64-support.patch +++ /dev/null @@ -1,104 +0,0 @@ -Backport from 0.4.0 - -commit 6f3714499e24b88cc05a02c8692015c5c17c5508 -Author: Michael Ellerman -Date: Wed Apr 18 17:58:00 2012 -0700 - - Add ppc64 platform - - Add 64-bit ppc support with a new platform file and update to the - platformselect code. - - Signed-off-by: Michael Ellerman - Signed-off-by: Nishanth Aravamudan - (cherry picked from commit b17773a7807f85f897413391f59d4a6d65ac9008) - -diff --git a/platform/switch_ppc64_linux.h b/platform/switch_ppc64_linux.h -new file mode 100644 -index 0000000..ded1fda ---- /dev/null -+++ b/platform/switch_ppc64_linux.h -@@ -0,0 +1,70 @@ -+/* -+ * this is the internal transfer function. -+ * -+ * HISTORY -+ * 09-Mar-12 Michael Ellerman -+ * 64-bit implementation, copied from 32-bit. -+ * 07-Sep-05 (py-dev mailing list discussion) -+ * removed 'r31' from the register-saved. !!!! WARNING !!!! -+ * It means that this file can no longer be compiled statically! -+ * It is now only suitable as part of a dynamic library! -+ * 14-Jan-04 Bob Ippolito -+ * added cr2-cr4 to the registers to be saved. -+ * Open questions: Should we save FP registers? -+ * What about vector registers? -+ * Differences between darwin and unix? -+ * 24-Nov-02 Christian Tismer -+ * needed to add another magic constant to insure -+ * that f in slp_eval_frame(PyFrameObject *f) -+ * STACK_REFPLUS will probably be 1 in most cases. -+ * gets included into the saved stack area. -+ * 04-Oct-02 Gustavo Niemeyer -+ * Ported from MacOS version. -+ * 17-Sep-02 Christian Tismer -+ * after virtualizing stack save/restore, the -+ * stack size shrunk a bit. Needed to introduce -+ * an adjustment STACK_MAGIC per platform. -+ * 15-Sep-02 Gerd Woetzel -+ * slightly changed framework for sparc -+ * 29-Jun-02 Christian Tismer -+ * Added register 13-29, 31 saves. The same way as -+ * Armin Rigo did for the x86_unix version. -+ * This seems to be now fully functional! -+ * 04-Mar-02 Hye-Shik Chang -+ * Ported from i386. -+ */ -+ -+#define STACK_REFPLUS 1 -+ -+#ifdef SLP_EVAL -+ -+#define STACK_MAGIC 6 -+ -+/* !!!!WARNING!!!! need to add "r31" in the next line if this header file -+ * is meant to be compiled non-dynamically! -+ */ -+#define REGS_TO_SAVE "r2", "r14", "r15", "r16", "r17", "r18", "r19", "r20", \ -+ "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r31", \ -+ "cr2", "cr3", "cr4" -+static int -+slp_switch(void) -+{ -+ register long *stackref, stsizediff; -+ __asm__ volatile ("" : : : REGS_TO_SAVE); -+ __asm__ ("mr %0, 1" : "=g" (stackref) : ); -+ { -+ SLP_SAVE_STATE(stackref, stsizediff); -+ __asm__ volatile ( -+ "mr 11, %0\n" -+ "add 1, 1, 11\n" -+ : /* no outputs */ -+ : "g" (stsizediff) -+ : "11" -+ ); -+ SLP_RESTORE_STATE(); -+ } -+ __asm__ volatile ("" : : : REGS_TO_SAVE); -+ return 0; -+} -+ -+#endif -diff --git a/slp_platformselect.h b/slp_platformselect.h -index 38b7ef4..68982d3 100644 ---- a/slp_platformselect.h -+++ b/slp_platformselect.h -@@ -8,6 +8,8 @@ - #include "platform/switch_amd64_unix.h" /* gcc on amd64 */ - #elif defined(__GNUC__) && defined(__i386__) - #include "platform/switch_x86_unix.h" /* gcc on X86 */ -+#elif defined(__GNUC__) && defined(__powerpc64__) && defined(__linux__) -+#include "platform/switch_ppc64_linux.h" /* gcc on PowerPC 64-bit */ - #elif defined(__GNUC__) && defined(__PPC__) && defined(__linux__) - #include "platform/switch_ppc_unix.h" /* gcc on PowerPC */ - #elif defined(__GNUC__) && defined(__ppc__) && defined(__APPLE__) diff --git a/python-greenlet.spec b/python-greenlet.spec index 9b1aacc..a9d9b79 100644 --- a/python-greenlet.spec +++ b/python-greenlet.spec @@ -3,23 +3,13 @@ %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} Name: python-greenlet -Version: 0.3.1 -Release: 11%{?dist} +Version: 0.4.0 +Release: 1%{?dist} Summary: Lightweight in-process concurrent programming Group: Development/Libraries License: MIT URL: http://pypi.python.org/pypi/greenlet -Source0: http://pypi.python.org/packages/source/g/greenlet/greenlet-%{version}.tar.gz - -# Based on https://bitbucket.org/ambroff/greenlet/changeset/2d5b17472757 -# slightly fixed up to apply cleanly. Avoid rhbz#746771 -Patch1: get-rid-of-ts_origin.patch -# Apply https://bitbucket.org/ambroff/greenlet/changeset/25bf29f4d3b7 -# to fix the i686 crash in rhbz#746771 -Patch2: i686-register-fixes.patch -# Backport https://github.com/python-greenlet/greenlet/commit/b17773a7 -# from greenlet 0.4.0 to support ppc64 -Patch3: ppc64-support.patch +Source0: http://pypi.python.org/packages/source/g/greenlet/greenlet-%{version}.zip BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -42,9 +32,6 @@ This package contains header files required for C modules development. %prep %setup -q -n greenlet-%{version} -%patch1 -p1 -b .get-rid-of-ts_origin -%patch2 -p1 -b .i686_register_fixes -%patch3 -p1 -b .ppc64_support %build CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build @@ -67,12 +54,11 @@ rm -rf %{buildroot} # Run the upstream benchmarking suite to further exercise the code: PYTHONPATH=$(pwd) %{__python} benchmarks/chain.py -PYTHONPATH=$(pwd) %{__python} benchmarks/switch.py %endif %files %defattr(-,root,root,-) -%doc doc/greenlet.txt README benchmarks AUTHORS NEWS +%doc doc/greenlet.txt README.rst benchmarks AUTHORS NEWS %{python_sitearch}/greenlet.so %{python_sitearch}/greenlet*.egg-info @@ -81,6 +67,9 @@ PYTHONPATH=$(pwd) %{__python} benchmarks/switch.py %{_includedir}/python*/greenlet %changelog +* Fri Jan 18 2013 Pádraig Brady - 0.4.0-1 +- Update to 0.4.0 + * Thu Oct 11 2012 Pádraig Brady - 0.3.1-11 - Add support for ppc64 diff --git a/sources b/sources index 2ce5558..a497d0c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -8d75d7f3f659e915e286e1b0fa0e1c4d greenlet-0.3.1.tar.gz +87887570082caadc08fb1f8671dbed71 greenlet-0.4.0.zip From 18eeda691e15e1e6575cb91cd73aca213e04c152 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Thu, 14 Feb 2013 13:37:23 -0600 Subject: [PATCH 2/5] - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild --- python-greenlet.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-greenlet.spec b/python-greenlet.spec index a9d9b79..ba28edf 100644 --- a/python-greenlet.spec +++ b/python-greenlet.spec @@ -4,7 +4,7 @@ Name: python-greenlet Version: 0.4.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Lightweight in-process concurrent programming Group: Development/Libraries License: MIT @@ -67,6 +67,9 @@ PYTHONPATH=$(pwd) %{__python} benchmarks/chain.py %{_includedir}/python*/greenlet %changelog +* Thu Feb 14 2013 Fedora Release Engineering - 0.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + * Fri Jan 18 2013 Pádraig Brady - 0.4.0-1 - Update to 0.4.0 From 74a0b5c2d91417fe204067f45b21d993bc3aa913 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sun, 4 Aug 2013 02:54:26 -0500 Subject: [PATCH 3/5] - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild --- python-greenlet.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-greenlet.spec b/python-greenlet.spec index ba28edf..3c67484 100644 --- a/python-greenlet.spec +++ b/python-greenlet.spec @@ -4,7 +4,7 @@ Name: python-greenlet Version: 0.4.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Lightweight in-process concurrent programming Group: Development/Libraries License: MIT @@ -67,6 +67,9 @@ PYTHONPATH=$(pwd) %{__python} benchmarks/chain.py %{_includedir}/python*/greenlet %changelog +* Sun Aug 04 2013 Fedora Release Engineering - 0.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + * Thu Feb 14 2013 Fedora Release Engineering - 0.4.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild From c5ea24f2b93d71ce05088a13185c00c5b49a1691 Mon Sep 17 00:00:00 2001 From: Kevin Fenzi Date: Mon, 5 Aug 2013 20:34:24 -0600 Subject: [PATCH 4/5] Update to 0.4.1 - Fix FTBFS bug #993134 --- .gitignore | 1 + python-greenlet.spec | 8 ++++++-- sources | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 39f4c4d..41babcb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ greenlet-0.3.1.tar.gz /greenlet-0.4.0.zip +/greenlet-0.4.1.zip diff --git a/python-greenlet.spec b/python-greenlet.spec index 3c67484..2ea8b7b 100644 --- a/python-greenlet.spec +++ b/python-greenlet.spec @@ -3,8 +3,8 @@ %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} Name: python-greenlet -Version: 0.4.0 -Release: 3%{?dist} +Version: 0.4.1 +Release: 1%{?dist} Summary: Lightweight in-process concurrent programming Group: Development/Libraries License: MIT @@ -67,6 +67,10 @@ PYTHONPATH=$(pwd) %{__python} benchmarks/chain.py %{_includedir}/python*/greenlet %changelog +* Mon Aug 05 2013 Kevin Fenzi 0.4.1-1 +- Update to 0.4.1 +- Fix FTBFS bug #993134 + * Sun Aug 04 2013 Fedora Release Engineering - 0.4.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild diff --git a/sources b/sources index a497d0c..6401625 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -87887570082caadc08fb1f8671dbed71 greenlet-0.4.0.zip +c2deda75bdda59c38cae12a77cc53adc greenlet-0.4.1.zip From 1f69689f939912a781089e7bb9ea57155223feee Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Thu, 23 Jan 2014 11:20:19 -0700 Subject: [PATCH 5/5] Update to 0.4.2 --- .gitignore | 1 + python-greenlet.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 41babcb..5d4eb2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ greenlet-0.3.1.tar.gz /greenlet-0.4.0.zip /greenlet-0.4.1.zip +/greenlet-0.4.2.zip diff --git a/python-greenlet.spec b/python-greenlet.spec index 2ea8b7b..219838b 100644 --- a/python-greenlet.spec +++ b/python-greenlet.spec @@ -3,7 +3,7 @@ %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} Name: python-greenlet -Version: 0.4.1 +Version: 0.4.2 Release: 1%{?dist} Summary: Lightweight in-process concurrent programming Group: Development/Libraries @@ -67,6 +67,9 @@ PYTHONPATH=$(pwd) %{__python} benchmarks/chain.py %{_includedir}/python*/greenlet %changelog +* Thu Jan 23 2014 Orion Poplawski 0.4.2-1 +- Update to 0.4.2 + * Mon Aug 05 2013 Kevin Fenzi 0.4.1-1 - Update to 0.4.1 - Fix FTBFS bug #993134 diff --git a/sources b/sources index 6401625..f13713d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -c2deda75bdda59c38cae12a77cc53adc greenlet-0.4.1.zip +580a8a5e833351f7abdaedb1a877f7ac greenlet-0.4.2.zip