Пример #1
0
static int
lrelease(lua_State *L) {
	struct cell_ud * cud = lua_touserdata(L,1);
	cell_release(cud->c);
	cud->c = NULL;
	return 0;
}
Пример #2
0
static void INTEGER32_destroy (uclptr_t int_exemplair)
{
	if (sizeof(int32_t) != sizeof(uclptr_t)) /* определяется на этапе компиляции */
	{
		cell_release (int_exemplair);
	};
}
Пример #3
0
void dechunk (uclptr_t starting_chunk)
{
	uclptr_t chunk, next;

	for (chunk = starting_chunk; !IS_NIL(chunk); chunk = next)
	{
		next = _CAR(chunk);
		cell_release(chunk);
	}
}
Пример #4
0
static void STRING_destroy (uclptr_t string_exemplair)
{
	//char* str = *(char**)&uclmem[string_exemplair];
	char *str = STRING_data(string_exemplair);
	free(str);
	if (sizeof(char*) <= sizeof(cell_t))
	{
		cell_release(string_exemplair);
	}
	else
	{
		dechunk (string_exemplair);
	}
}
Пример #5
0
static void VECTOR_destroy (uclptr_t vector_exemplair)
{
	ucl_vector_t *vector = VECTOR_data(vector_exemplair);
	uint32_t i;
	for (i=0; i < vector->length; i++)
	{
		uclptr_t index = vector->ptr[i];
		if (index != NIL) delete_this(index);
	}
	free(vector->ptr);
	free(vector);
	if (sizeof(uclptr_t*) <= sizeof(cell_t))
	{
		cell_release(vector_exemplair);
	}
	else
	{
		dechunk (vector_exemplair);
	}
}
Пример #6
0
int 
cell_dispatch_message(struct cell *c) {
	cell_lock(c);
	if (c->quit) {
		cell_destroy(c);
		return CELL_QUIT;
	}
	struct message m;
	int empty = mq_pop(&c->mq, &m);
	if (empty || c->L == NULL) {
		cell_unlock(c);
		return CELL_EMPTY;
	} 
	cell_grab(c);
	cell_unlock(c);
	lua_pushvalue(c->L, 1);	// dup callback
	lua_pushinteger(c->L, m.port);
	lua_pushlightuserdata(c->L, m.buffer);
	lua_call(c->L, 2, 0);
	cell_release(c);

	return CELL_MESSAGE;
}