예제 #1
0
/* {{{ 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;
}
예제 #2
0
파일: set.c 프로젝트: HackLinux/chandler
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;
}
예제 #3
0
파일: _set.hpp 프로젝트: LenxWei/py11
 /** 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");
 }
예제 #4
0
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;
}
예제 #5
0
파일: locks.c 프로젝트: chenbk85/jega
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;
}