Esempio n. 1
0
CDClient*
CD_CreateClient (CDServer* server)
{
	CDClient* self = CD_malloc(sizeof(CDClient));

	if (pthread_rwlock_init(&self->lock.status, NULL) != 0) {
		CD_abort("pthread rwlock failed to initialize");
	}

	self->server = server;

	self->status = CDClientConnect;
	self->jobs   = 0;

	self->buffers = NULL;

	DYNAMIC(self) = CD_CreateDynamic();
	ERROR(self)   = CDNull;

	return self;
}
Esempio n. 2
0
void
CD_DestroyClient (CDClient* self)
{
	assert(self);

	CD_EventDispatch(self->server, "Client.destroy", self);

	if (self->buffers) {
		bufferevent_flush(self->buffers->raw, EV_READ | EV_WRITE, BEV_FINISHED);
		bufferevent_disable(self->buffers->raw, EV_READ | EV_WRITE);
		bufferevent_free(self->buffers->raw);

		CD_DestroyBuffers(self->buffers);
	}

	CD_DestroyDynamic(DYNAMIC(self));

	pthread_rwlock_destroy(&self->lock.status);

	CD_free(self);
}
Esempio n. 3
0
static int checkSlot(Ejs *ejs, EjsArray *ap, int slotNum)
{
    if (slotNum < 0) {
        if (!DYNAMIC(ap)) {
            ejsThrowTypeError(ejs, "Object is not dynamic");
            return EJS_ERR;
        }
        slotNum = ap->length;
        if (growArray(ejs, ap, ap->length + 1) < 0) {
            ejsThrowMemoryError(ejs);
            return EJS_ERR;
        }

    } else if (slotNum >= ap->length) {
        if (growArray(ejs, ap, slotNum + 1) < 0) {
            ejsThrowMemoryError(ejs);
            return EJS_ERR;
        }
    }
    return slotNum;
}