Example #1
0
File: buffer.c Project: 899/swoole
swDataBuffer_trunk *swDataBuffer_getTrunk(swDataBuffer *data_buffer, swDataBuffer_item *item)
{
	//第一次使用
	if (item->last == NULL)
	{
		item->last = item->first;
		//printf("1.-------------------------last=%p|first=%p\n", item->last, item->first);
		return item->first;
	}
	//当前的trunk为空,可直接使用
	else if (item->last->len == 0)
	{
		//printf("3.-------------------------\n");
		return item->last;
	}
	//当前trunk
	else
	{
		//printf("2.-------------------------\n");
		swDataBuffer_trunk *trunk = swDataBuffer_newTrunk(data_buffer, item);
		if (trunk == NULL)
		{
			swWarn("dataBufer: create trunk fail\n");
			return NULL;
		}
		item->last->next = trunk;
		trunk->pre = item->last;
		item->last = trunk;
		return trunk;
	}
}
Example #2
0
swDataBuffer_item* swDataBuffer_newItem(swDataBuffer *data_buffer, int fd, int trunk_size)
{
	swDataBuffer_item *newItem = sw_malloc(sizeof(swDataBuffer_item));
	//内存分配失败
	if (newItem == NULL)
	{
		swWarn("malloc for newItem failed. Error: %s[%d]", strerror(errno), errno);
		return NULL;
	}

	bzero(newItem, sizeof(swDataBuffer_item));

	//创建item时,自动建立一个trunk
	swDataBuffer_trunk *newTrunk = swDataBuffer_newTrunk(data_buffer, newItem);
	if (newTrunk == NULL)
	{
		sw_free(newItem);
		swWarn("malloc for newTrunk failed. Error: %s[%d]", strerror(errno), errno);
		return NULL;
	}

	newItem->fd = fd;
	swHashMap_add_int(&data_buffer->map, fd, newItem);

	return newItem;
}
Example #3
0
File: buffer.c Project: 899/swoole
swDataBuffer_item* swDataBuffer_newItem(swDataBuffer *data_buffer, int fd, int trunk_size)
{
	swDataBuffer_item *newItem = sw_malloc(sizeof(swDataBuffer_item));
	//创建item时,自动建立一个trunk
	swDataBuffer_trunk *newTrunk = swDataBuffer_newTrunk(data_buffer, newItem);
	if (newItem == NULL)
	{
		return NULL;
	}
	else if (newTrunk == NULL)
	{
		sw_free(newItem);
		return NULL;
	}
	else
	{
		bzero(newItem, sizeof(swDataBuffer_item));
		newItem->fd = fd;
		HASH_ADD_INT(data_buffer->ht, fd, newItem);
		newItem->first = newTrunk;
		return newItem;
	}
	return NULL;
}