/* {{{ session_close */ int Session_close(PYLIBSSH2_SESSION *self) { PRINTFUNCNAME int rc; char *reason = "end"; PyObject *item; if(self->opened) { while(PySet_Size(self->sftps)) { item = PySet_Pop(self->sftps); Sftp_shutdown((PYLIBSSH2_SFTP*)item); Py_XDECREF(item); } while(PySet_Size(self->channels)) { item = PySet_Pop(self->channels); Channel_close((PYLIBSSH2_CHANNEL*)item); Py_XDECREF(item); } while(PySet_Size(self->listeners)) { item = PySet_Pop(self->listeners); Py_XDECREF(item); } Py_BEGIN_ALLOW_THREADS rc = libssh2_session_disconnect(self->session, reason); Py_END_ALLOW_THREADS self->opened = 0; return rc; } return 0; }
static PyObject *t_set_pop(t_set *self, PyObject *args) { PyObject *value; int setDirty = 1; if (!PyArg_ParseTuple(args, "|i", &setDirty)) return NULL; value = PySet_Pop(self->set); if (!value) return NULL; if (!(self->itemvalue.flags & V_PURE)) { PyObject *v = _restoreValue(self, value); Py_DECREF(value); if (!v) return NULL; value = v; } if (setDirty && _t_itemvalue__setDirty((t_itemvalue *) self, 0) < 0) { Py_DECREF(value); return NULL; } return value; }
/** pop an element * @throw index_err if empty * @throw err */ obj pop() { if(_p){ PyObject* r = PySet_Pop(_p); if(r) return r; } throw index_err("set pop failed"); }
PyObject* setPopTest(PyObject* self, PyObject* args) { PyObject* set; int i; if (!PyArg_ParseTuple(args, "O!i", &PySet_Type, &set, &i)) return NULL; //printf("pop %i elements from the set...\n", i); int j; for (j = 0; j < i; ++j) { PyObject* pop = PySet_Pop(set); // if (pop != NULL) // puts(PyString_AS_STRING(pop)); // else // puts("No more elements in the set!"); } Py_RETURN_NONE; }
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; }