I'm not sure I understand. What exactly is blocking us? I fixed the unittest crash. The rest of my question was musings on how frame pickling works, because it seems to only pickle one frame at a time, marking its parent with the special valid None to indicate this.... Ah, tasklets are pickled with a list of frames, that they then re-assemble when unpickled.
This is what confused me. I would have pickled frames as a linked list, recursively. I'm sure there is a good reason why they are pickled the way they are :) K > -----Original Message----- > From: stackless-boun...@stackless.com [mailto:stackless- > boun...@stackless.com] On Behalf Of Richard Tew > Sent: 6. mars 2014 07:34 > To: The Stackless Python Mailing List > Subject: Re: [Stackless] 3.2.5 unittest failure > > This is the blocker for the releases of 2.7.x, 3.2.x, 3.3.x and 3.4. > > Is this something that is a problem with the way we are pickling? Or is it > related to how unpickling happens? > > Cheers, > Richard. > > On 3/5/14, Kristján Valur Jónsson <krist...@ccpgames.com> wrote: > > ok, I have fixed it and pushed a new version. > > I don't quite understand, why are unpickled frames marked with None in > > their f_back? Does that mean that we never pickle frame stacks, but > > only single frames? > > I looked for other cases where we test for this None but didn't find it... > > K > > > >> -----Original Message----- > >> From: stackless-boun...@stackless.com [mailto:stackless- > >> boun...@stackless.com] On Behalf Of Richard Tew > >> Sent: 3. mars 2014 07:32 > >> To: stackless@stackless.com > >> Subject: [Stackless] 3.2.5 unittest failure > >> > >> Kristjan, is it possible you missed a graft? > >> > >> This is the last line before a release build of 3.2.5 crashes for me: > >> > >> testCrasher (test_defects.TestCrashUponFrameUnpickling) ... > >> > >> > python32.dll!frame_getback(_frame * f=0x02836700, void * > >> nope=0x00000000) Line 375 + 0x9 bytes C > >> python32.dll!getset_get(PyGetSetDescrObject * descr=0x02069440, > >> _object * obj=0x02836700, _object * type=0x1e2b03f8) Line 149 + 0x19 > >> bytes C > >> python32.dll!_PyObject_GenericGetAttrWithDict(_object * > >> obj=0x02836700, _object * name=0x0205fe80, _object * dict=0x00000000) > >> Line 988 + 0x12 bytes C > >> python32.dll!PyObject_GenericGetAttr(_object * obj=0x02836700, > >> _object * name=0x0205fe80) Line 1050 + 0xf bytes C > >> python32.dll!PyObject_GetAttr(_object * v=0x02836700, _object * > >> name=0x0205fe80) Line 835 + 0x10 bytes C > >> python32.dll!PyEval_EvalFrame_value(_frame * f=0x027f56b8, int > >> throwflag=506147444, _object * retval=0x1e2b3274) Line 2963 + 0x7 > >> bytes C > >> > >> It crashes in: > >> > >> static PyObject * > >> frame_getback(PyFrameObject *f, void *nope) { > >> PyFrameObject *fb = f->f_back; > >> PyObject *ret; > >> while (fb != NULL && ! PyFrame_Check(fb)) > >> fb = fb->f_back; > >> > >> Where fb = 0x03. > >> > >> Cheers, > >> Richard. > >> > >> _______________________________________________ > >> Stackless mailing list > >> Stackless@stackless.com > >> http://www.stackless.com/mailman/listinfo/stackless > > > > _______________________________________________ > > Stackless mailing list > > Stackless@stackless.com > > http://www.stackless.com/mailman/listinfo/stackless > > > > _______________________________________________ > Stackless mailing list > Stackless@stackless.com > http://www.stackless.com/mailman/listinfo/stackless _______________________________________________ Stackless mailing list Stackless@stackless.com http://www.stackless.com/mailman/listinfo/stackless