Hello community, here is the log from the commit of package python-greenlet for openSUSE:Factory checked in at 2012-01-04 07:30:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-greenlet (Old) and /work/SRC/openSUSE:Factory/.python-greenlet.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-greenlet", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/python-greenlet/python-greenlet.changes 2011-09-26 10:15:34.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-greenlet.new/python-greenlet.changes 2012-01-04 07:30:30.000000000 +0100 @@ -1,0 +2,6 @@ +Fri Dec 23 13:20:47 UTC 2011 - [email protected] + +- Add upstream commits 25bf29f4d3b7 and 2d5b17472757 (bnc#738431) +- Implement %check + +------------------------------------------------------------------- New: ---- get-rid-of-ts_origin.patch i686-register-fixes.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-greenlet.spec ++++++ --- /var/tmp/diff_new_pack.SxmsgE/_old 2012-01-04 07:30:31.000000000 +0100 +++ /var/tmp/diff_new_pack.SxmsgE/_new 2012-01-04 07:30:31.000000000 +0100 @@ -24,6 +24,10 @@ License: MIT Group: Development/Libraries/Python Source0: http://pypi.python.org/packages/source/g/greenlet/greenlet-%{version}.tar.gz +# PATCH-FIX-UPSTREAM [email protected] i686-register-fixes.patch -- Upstream commit 25bf29f4d3b7 +Patch1: i686-register-fixes.patch +# PATCH-FIX-UPSTREAM [email protected] get-rid-of-ts_origin.patch -- Upstream commit 2d5b17472757 +Patch2: get-rid-of-ts_origin.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: python-devel BuildRequires: python-distribute @@ -48,6 +52,8 @@ %prep %setup -q -n greenlet-%{version} +%patch1 -p1 +%patch2 -p1 %build CFLAGS="%{optflags} -fno-strict-aliasing" python setup.py build @@ -55,6 +61,9 @@ %install python setup.py install --prefix=%{_prefix} --root=%{buildroot} +%check +python setup.py test + %files %defattr(-,root,root) %doc AUTHORS NEWS README ++++++ get-rid-of-ts_origin.patch ++++++ 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; } ++++++ i686-register-fixes.patch ++++++ # HG changeset patch # User Alexey Borzenkov <[email protected]> # 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 <[email protected]> + * 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; } -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
