If there is no reference to the tasklet, how do you expect to restart it? Looking at your code, obviously the call to event_set(), if it is to store the tasklet for later wakeup, must do a Py_INCREF() on it. Anyone intending to store a reference must Incref. K
> -----Original Message----- > From: [email protected] [mailto:stackless- > [email protected]] On Behalf Of Péter Szabó > Sent: 28. janúar 2010 11:26 > To: The Stackless Python Mailing List > Subject: [Stackless] how does my tasklets and objects get freed > > Hi, > > I'm using Stackless 2.6 with some Pyrex (C) code, and I'd like to make > sure that my objects won't be free()d too early (by reference counting > or garbage collection). > > I have a C function like this: > > void MyFunction() { > struct event_t ev; > PyTaskletObject *tasklet; > ... > tasklet = PyStackless_GetCurrent(); > event_set(&ev, ..., ..., ..., (void*)tasklet); > event_add(&ev, NULL) > PyStackless_Schedule(None, 1); /* stackless.schdule_remove() */ > ... > Py_DECREF(tasklet); > } > > I'm afraid that after the call to PyStackless_Schedule, it may happen > that there will be no reference to this tasklet, so the garbage > collector might free() it at some point. I want to prevent this from > happening, the tasklet must be kept until it gets scheduled again, and > Py_DECREF(tasklet) is run. How do I ensure this? > > Thanks, > > Péter > > _______________________________________________ > Stackless mailing list > [email protected] > http://www.stackless.com/mailman/listinfo/stackless _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless
