Exemplo n.º 1
0
static PyObject*
SemaphoreObject_notify_waiter(SemaphoreObject *self, PyObject *args)
{
    PyObject *waiter, *res;

    if (PySet_Size(self->waiters) > 0 && self->counter >0) {
        waiter = PySet_Pop(self->waiters);
        if (waiter == NULL) {
            return NULL;
        }
        res = greenlet_switch(waiter, NULL, NULL);
        Py_XDECREF(res);
        Py_DECREF(waiter);
        if (res == NULL) {
            return NULL;
        }
    }
    Py_RETURN_NONE;
}
Exemplo n.º 2
0
        int resume(handle fiber, int data)
        {
            fiberPassData = data;
            int r = 0;
#if __S3E__
            IwFibreYield((IwFibre*)fiber);
#elif GREENLETS
            if (!fiber)
                fiber = greenlet_getparent();
            r = greenlet_switch((greenlet*)fiber, data);
#else

#endif

            if (fiber == 0)
            {
                if (fiberPassData == 1)
                {
                    throw FiberExit();
                }
            }

            return r;
        }
Exemplo n.º 3
0
gr_param greenlet_run(greenlet* self, gr_param data)
{
	return greenlet_switch(self, data);
}