[Stackless] stacklesslib & tealet
Kristján Valur Jónsson
kristjan at ccpgames.com
Thu Apr 18 17:37:59 CEST 2013
There is some weirdness going on. I'm drilling down with print statements, but the problem is that those do affect optimization.
Also, I realized that I uploaded an old version of the lib to the repo. I will put a newer version in place, one that actually includes the pytealet project :)
K
> -----Original Message-----
> From: stackless-bounces at stackless.com [mailto:stackless-
> bounces at stackless.com] On Behalf Of Kristján Valur Jónsson
> Sent: 18. apríl 2013 11:27
> To: The Stackless Python Mailing List
> Subject: Re: [Stackless] stacklesslib & tealet
>
> installed mingw (no simple feat) and reproed your problem.
> However, it does not seem to include any debug symbols. I didn´t find any
> way to make sure those were gerenrated. So debugging with visual studio is
> off.
> I'll try some print statements.
> How do you make sure your .exe is linked with debug symbols?
> K
>
> > -----Original Message-----
> > From: stackless-bounces at stackless.com [mailto:stackless-
> > bounces at stackless.com] On Behalf Of Kristján Valur Jónsson
> > Sent: 18. apríl 2013 09:34
> > To: The Stackless Python Mailing List
> > Subject: Re: [Stackless] stacklesslib & tealet
> >
> >
> >
> > > -----Original Message-----
> > >
> > > What is the license of tealets? Has it been derived from any parts
> > > of Stckless, which might force an derivative usage Python license on it?
> > >
> > I don't understand, is this some lawyer talk? My education is in the
> > natural sciences.
> > the 'platf_slp' folder is copied verbatim from stackless. I added
> > that as a fallback since stackless supports more platforms than the
> > original tealet version.
> > However, a better way would be to take some of the greenlet stuff
> > since that is receiving more active support these days.
> >
> > > Do you have any future plans for it?
> > One of the plans was to use this as the hard-switching engine in
> > Stackless Python.
> > It would provide a clear api and separation of responsibility, and
> > possibly simplify Stackless too to boot.
> >
> > >
> > > It compiles okay on mingw / Windows 7 (64 bit), but tests do not do so
> well:
> > >
> > > $ make tests
> > > gcc -g -o run_tests_static_g tealet.c tests.c run_tests_static_g
> > > +++ Running tests with newmode = 0
> > > +++ Running test 0... +++
> > > +++ Running test 1... +++
> > > +++ Running test 2... +++
> > > +++ Running test 3... +++
> > > +++ Running test 4... +++
> > > +++ Running test 5... +++
> > > +++ Running test 6... +++
> > > +++ All ok. +++
> > > +++ Running tests with newmode = -1
> > > +++ Running test 0... +++
> > > +++ Running test 1... +++
> > > +++ Running test 2... +++
> > > +++ Running test 3... +++
> > > +++ Running test 4... +++
> > > +++ Running test 5... +++
> > > +++ Running test 6... +++
> > > +++ All ok. +++
> > > gcc -g -O2 -o run_tests_static_o tealet.c tests.c run_tests_static_o
> > > +++ Running tests with newmode = 0
> > > +++ Running test 0... +++
> > > +++ Running test 1... +++
> > > Assertion failed: g_main->g_current == (tealet_sub_t *)g_main, file
> > > tealet.c, li ne 625
> > >
> > > Thoughts? :-)
> > Well, I confess to developing this with windows and visual c only.
> > Optimizations, always pesky. You can see code such as this:
> >
> > /* set up the following field with an indirection, which is needed
> > to prevent any inlining */
> > _tealet_initialstub = tealet_initialstub;
> > _tealet_switchstack = tealet_switchstack;
> >
> > Perhaps this is failing? Inlining and modification of functions will
> > do damage.....
> >
> > Test 1 is simple:
> >
> > tealet_t *test_simple_run(tealet_t *t1, void *arg) {
> > assert(t1 != g_main);
> > status = 1;
> > return g_main;
> > }
> >
> > void test_simple(void)
> > {
> > init_test();
> > tealet_new(g_main, test_simple_run, NULL);
> > assert(status == 1);
> > fini_test();
> > }
> >
> > The assertion that is failing (why are the assertions being triggered
> > in a O2 build, btw?) is this:
> >
> > void tealet_finalize(tealet_t *tealet) {
> > tealet_main_t *g_main = TEALET_GET_MAIN(tealet);
> > assert(TEALET_IS_MAIN_STACK(g_main));
> > assert(g_main->g_current == (tealet_sub_t *)g_main);
> > tealet_free(g_main, g_main);
> > }
> >
> > It is asserting that the current tealet is the main tealet. If it
> > isn't, then something failed in switching back.
> > Since this is the simplest of all tests, newmode is 0, it should be
> > very easy to analyse.
> >
> > I'll see if I can give this mingw of which you speak a spin.
> >
> > K
> >
> >
> >
> > _______________________________________________
> > Stackless mailing list
> > Stackless at stackless.com
> > http://www.stackless.com/mailman/listinfo/stackless
>
>
>
> _______________________________________________
> Stackless mailing list
> Stackless at stackless.com
> http://www.stackless.com/mailman/listinfo/stackless
More information about the Stackless
mailing list