[Stackless] C API to open/close a channel?
Alberto Ganesh Barbati
AlbertoBarbati at libero.it
Tue Jul 1 11:44:29 CEST 2008
Richard Tew ha scritto:
> On Sun, Jun 29, 2008 at 7:24 AM, Alberto Ganesh Barbati
> <AlbertoBarbati at libero.it> wrote:
>> in the C API there are a PyChannel_GetClosing and a PyChannel_GetClosed
>> functions, however I couldn't find any PyChannel_Close or PyChannel_Open
>> function. Was that an oversight? If not, how is a channel supposed to be
>> closed/reopened with the C API?
>
> You are the first person I have heard of who actually closes or opens
> channels :-)
Really? It seems such a useful feature to me... :)
>
> If you want the API changed in the near future, you could submit a
> patch. Otherwise, it may get done next week when we are hoping plan
> to port Stackless to Python 3000. Kristjan Valur is flying over to
> the CCP North America offices in Stone Mountain, Georgia to join me
> for this from the 7th - 11th July. If anyone else wishes to join us
> for this week and work on Stackless, feel free to email me and we'll
> talk.
Here's the patch:
--- stackless-2.52\Stackless\stackless_api.h_ 14/05/2007 17.59.12
+++ stackless-2.52\Stackless\stackless_api.h 01/07/2008 11.40.08
@@ -235,244 +235,250 @@
/* 1 = soft switched 0 = hard switched -1 = failure */
/* the next tasklet in the queue or None */
PyAPI_FUNC(PyObject *) PyChannel_GetQueue(PyChannelObject *self);
+/* close() the channel */
+PyAPI_FUNC(void) PyChannel_Close(PyChannelObject *self);
+
+/* open() the channel */
+PyAPI_FUNC(void) PyChannel_Open(PyChannelObject *self);
+
/* whether close() was called */
PyAPI_FUNC(int) PyChannel_GetClosing(PyChannelObject *self);
/* closing, and the queue is empty */
--- stackless-2.52\Stackless\module\channelobject.c_ 09/01/2008 22.13.34
+++ stackless-2.52\Stackless\module\channelobject.c 01/07/2008 11.39.00
@@ -878,897 +878,909 @@
Py_INCREF(Py_None);
return Py_None;
}
+void
+PyChannel_Close(PyChannelObject *self)
+{
+ self->flags.closing = 1;
+}
+
static char channel_open__doc__[] =
"channel.open() -- reopen a channel. See channel.close.";
static PyObject *
channel_open(PyChannelObject *self)
{
self->flags.closing = 0;
Py_INCREF(Py_None);
return Py_None;
+}
+
+void
+PyChannel_Open(PyChannelObject *self)
+{
+ self->flags.closing = 0;
}
static char channel_reduce__doc__[] =
"channel.__reduce__() -- currently does not distinguish threads.";
More information about the Stackless
mailing list