Пример #1
0
void init_validation() {
    int i;
	vs.type = TRANSACTION_SUBMIT;
    vs.ST = 0;
    vs.abort_count = 0;
    vs.commit_count = 0;
	vs.update_set_count = 0;
    vs.ws = bloom_new(BIG_BLOOM);
    vs.snapshots = DB_MALLOC(sizeof(bloom*) * MaxPreviousST);
    for (i = 0; i < MaxPreviousST; i++)
        vs.snapshots[i] = bloom_new(BIG_BLOOM);
    vs.abort_tr_ids = DB_MALLOC(sizeof(tr_id) * MAX_ABORT_COUNT);
    vs.commit_tr_ids = DB_MALLOC(sizeof(tr_id) * ValidationBufferSize);
    us_buffer = DB_MALLOC(sizeof(buffer));
    us_buffer->data = DB_MALLOC(1024*1024);
    buffer_clear(us_buffer);
}
Пример #2
0
// release one day event's extend data:tw0
INT32 data_release_extend()
{
	INT32 ret,i,j;
	date_time start_dt, end_dt;
	UINT8 *tmpbuf = 0; // use to avoid memory fragment
	ret = ERR_FAILED;
	
	epg_enter_mutex();
	
	MTP_PRINT("%s\n", __FUNCTION__);

	tmpbuf = (UINT8*)MALLOC(300);
	do
	{
		for(i=0; i<db_block.index; i++)
		{
			get_event_start_time(&db_block.node[i], &start_dt);
			get_event_end_time(&db_block.node[i], &end_dt);
			if(eit_compare_time(&tw0.t_min,&end_dt)<=0 ||eit_compare_time(&tw0.t_max, &start_dt)>=0 )
			{// release extend data
				for(j=0; j<MAX_EPG_LANGUAGE_COUNT; j++)
				{
					if(db_block.node[i].status==NODE_ACTIVE && db_block.node[i].lang[j].ext_text_length!=0)
					{
						if(tmpbuf!=NULL && db_block.node[i].status==NODE_ACTIVE && db_block.node[i].lang[j].text_length!=0)
						{// avoid memory fragment
							MEMCPY(tmpbuf, db_block.node[i].lang[j].text_char, db_block.node[i].lang[j].text_length);
							DB_FREE(db_block.node[i].lang[j].text_char);
							db_block.node[i].lang[j].text_char = NULL;
						}
						
						MTP_PRINT("%d-%d\n", start_dt.month, start_dt.day);
						DB_FREE(db_block.node[i].lang[j].ext_text_char);
						db_block.node[i].lang[j].ext_text_char = NULL;
						db_block.node[i].lang[j].ext_text_length = 0;
						
						if(tmpbuf!=NULL && db_block.node[i].status==NODE_ACTIVE && db_block.node[i].lang[j].text_length!=0)
						{// avoid memory fragment
							db_block.node[i].lang[j].text_char = (UINT8*)DB_MALLOC(db_block.node[i].lang[j].text_length);
							MEMCPY(db_block.node[i].lang[j].text_char, tmpbuf, db_block.node[i].lang[j].text_length);
						}
						ret = SUCCESS;
					}
				}
			}
		}
	}while(ret!=SUCCESS && update_time_window(&tw0, &tw1, EXT_DATA)==SUCCESS);
	if(tmpbuf!=0)
		FREE(tmpbuf);
	
	epg_leave_mutex();
	return ret;
}
Пример #3
0
transaction* transaction_new() {
    transaction* t;
    
    t = DB_MALLOC(sizeof(transaction));
    t->st = -1;
	t->seqn = 0;
	t->remote_count = 0;
    t->rs = create_hashtable(hashtable_init);
    t->ws = create_hashtable(hashtable_init);
	t->get_cb = NULL;
	t->cb_arg = NULL;
	t->cb_val = NULL;
	t->id.client_id = 44444;
	t->never_set = 55555;
	
    return t;
}
Пример #4
0
//add a node to db
//node: IN, external node, will be copied to new node of the db
static INT32 _add_node(struct DB_NODE *node)
{
	INT32 ret,i;
	ret = ERR_FAILED;
	//first add to tail

	if (db_block.index < db_block.max_count)
	{
		struct DB_NODE *dst = &db_block.node[db_block.index];
		MEMCPY(dst, node, sizeof(struct DB_NODE));
		dst->status = NODE_ACTIVE;
		for(i=0;i<MAX_EPG_LANGUAGE_COUNT;i++)
		{
			dst->lang[i].text_length = 0;
			dst->lang[i].text_char = NULL;
#ifdef EPG_MULTI_TP
			dst->lang[i].ext_text_length = 0;
			dst->lang[i].ext_text_char = NULL;
#endif
		}
#ifdef DTG_PVR
		for(i=0;i<MAX_EVENT_CRID_NUM;i++)
		{
			dst->eit_cid_desc[i].crid_byte==NULL;
			dst->eit_cid_desc[i].crid_length = 0;
		}
#endif
		db_block.index ++;
		db_block.count ++;
		
		ret = SUCCESS;
		for (i=0; i<MAX_EPG_LANGUAGE_COUNT; i++)
		{
			if (node->lang[i].text_length > 0)
			{
				dst->lang[i].text_char = (UINT8*)DB_MALLOC(node->lang[i].text_length);
				if (dst->lang[i].text_char == NULL)
				{
					ret = ERR_NO_MEM;
					break;
				}
				else
				{
					MEMCPY(dst->lang[i].text_char, node->lang[i].text_char, node->lang[i].text_length);
					dst->lang[i].text_length = node->lang[i].text_length;
				}
			}
#ifdef EPG_MULTI_TP
			if(node->lang[i].ext_text_length>0)
			{
				dst->lang[i].ext_text_char = (UINT8*)DB_MALLOC(node->lang[i].ext_text_length);
				if(dst->lang[i].ext_text_char==NULL)
				{
					ret = ERR_NO_MEM;
					break;
				}
				else
				{
					MEMCPY(dst->lang[i].ext_text_char, node->lang[i].ext_text_char, node->lang[i].ext_text_length);
					dst->lang[i].ext_text_length = node->lang[i].ext_text_length;
				}
			}
#endif
		}
#ifdef DTG_PVR
		for (i = 0; i < MAX_EVENT_CRID_NUM; i++)
		{
			if (node->eit_cid_desc[i].crid_length > 0)
			{
				dst->eit_cid_desc[i].crid_byte = (UINT8*)DB_MALLOC(node->eit_cid_desc[i].crid_length);
				if (dst->eit_cid_desc[i].crid_byte == NULL)
				{
					DB_PRINT("%s: alloc failed!\n",__FUNCTION__);
					dst->eit_cid_desc[i].crid_length = 0;
					ret = ERR_NO_MEM;
					break;
				}
				else
					MEMCPY(dst->eit_cid_desc[i].crid_byte, \
					node->eit_cid_desc[i].crid_byte, node->eit_cid_desc[i].crid_length);
			}
		}
#endif
		if(ret==ERR_NO_MEM)
		{	
			MTP_PRINT("free\n");
			for(i=0;i<MAX_EPG_LANGUAGE_COUNT;i++)
			{
				if(dst->lang[i].text_char!=NULL)
				{	
					DB_FREE(dst->lang[i].text_char);
					dst->lang[i].text_char = NULL;
					dst->lang[i].text_length = 0;
				}
#ifdef EPG_MULTI_TP
				if(dst->lang[i].ext_text_char!=NULL)
				{
					DB_FREE(dst->lang[i].ext_text_char);
					dst->lang[i].ext_text_char = NULL;
					dst->lang[i].ext_text_length = 0;
				}
#endif
			}
#ifdef DTG_PVR
			for(i=0;i<MAX_EVENT_CRID_NUM;i++)
			{
				if(dst->eit_cid_desc[i].crid_byte!=NULL)
				{
					DB_FREE(dst->eit_cid_desc[i].crid_byte);
					dst->eit_cid_desc[i].crid_byte = NULL;
					dst->eit_cid_desc[i].crid_length = 0;
				}
			}
#endif
			dst->status = NODE_DIRTY;
			db_block.index --;
			db_block.count --;
			MTP_PRINT("done\n");
		}
		else
			MTP_PRINT("ei=%d,i=%d\n",dst->event_id,db_block.index-1);

		//add 2 view???
//		_add2view(dst, &epg_view);
		MTP_PRINT("cnt:%d\n", db_block.count);
		return ret;
	}
	else	//else copy to some dirty one
	{
		//ret =  _node_op((node_op_t)_node_cpy, node);
		for(i=0;i<db_block.index;i++)
			if(db_block.node[i].status!=NODE_ACTIVE)
			{
				ret = _node_cpy(&db_block.node[i],node);
				if(ret==SUCCESS||ret==ERR_NO_MEM)
					break;
			}
		MTP_PRINT("cnt:%d\n", db_block.count);
		return ret;
	}
}
Пример #5
0
//if dst is FREE or DIRTY, copy src to dst
static INT32 _node_cpy(struct DB_NODE *dst, struct DB_NODE *src)
{
	UINT8 i;
	INT32 ret;
	if (dst->status != NODE_ACTIVE)	//free or dirty
	{
		MEMCPY(dst, src, sizeof(struct DB_NODE));
		for(i=0;i<MAX_EPG_LANGUAGE_COUNT;i++)
		{
			dst->lang[i].text_length = 0;
			dst->lang[i].text_char = NULL;
#ifdef EPG_MULTI_TP
			dst->lang[i].ext_text_length = 0;
			dst->lang[i].ext_text_char = NULL;
#endif
		}
		dst->status = NODE_ACTIVE;
		db_block.count ++;
		ret = SUCCESS;
		for (i=0; i<MAX_EPG_LANGUAGE_COUNT; i++)
		{
			if (src->lang[i].text_length > 0)
			{
				dst->lang[i].text_char = (UINT8*)DB_MALLOC(src->lang[i].text_length);
				if (dst->lang[i].text_char == NULL)
				{
					ret = ERR_NO_MEM;
					break;
				}
				else {
					MEMCPY(dst->lang[i].text_char, src->lang[i].text_char, src->lang[i].text_length);
					dst->lang[i].text_length = src->lang[i].text_length;
				}
			}
#ifdef EPG_MULTI_TP
			if(src->lang[i].ext_text_length>0)
			{
				dst->lang[i].ext_text_char = (UINT8*)DB_MALLOC(src->lang[i].ext_text_length);
				if(dst->lang[i].ext_text_char==NULL)
				{
					ret = ERR_NO_MEM;
					break;
				}
				else {
					MEMCPY(dst->lang[i].ext_text_char, src->lang[i].ext_text_char, src->lang[i].ext_text_length);
					dst->lang[i].ext_text_length = src->lang[i].ext_text_length;
				}
			}
#endif
		}

#ifdef DTG_PVR
		for (i = 0; i < MAX_EVENT_CRID_NUM; i++)
		{
			if (src->eit_cid_desc[i].crid_length > 0)
			{
				dst->eit_cid_desc[i].crid_byte = (UINT8*)DB_MALLOC(src->eit_cid_desc[i].crid_length);
				if (dst->eit_cid_desc[i].crid_byte == NULL)
				{
					ret = ERR_NO_MEM;
					break;
				}
				else
					MEMCPY(dst->eit_cid_desc[i].crid_byte, \
					src->eit_cid_desc[i].crid_byte, src->eit_cid_desc[i].crid_length);
			}
		}
#endif
		if(ret==ERR_NO_MEM)
		{
			for(i=0;i<MAX_EPG_LANGUAGE_COUNT;i++)
			{
				if(dst->lang[i].text_char!=NULL)
				{
					DB_FREE(dst->lang[i].text_char);
					dst->lang[i].text_char = NULL;
					dst->lang[i].text_length = 0;
				}
#ifdef EPG_MULTI_TP
				if(dst->lang[i].ext_text_char!=NULL)
				{
					DB_FREE(dst->lang[i].ext_text_char);
					dst->lang[i].ext_text_char = NULL;
					dst->lang[i].ext_text_length = 0;
				}
#endif
			}
#ifdef DTG_PVR
			for(i=0;i<MAX_EVENT_CRID_NUM;i++)
			{
				if(dst->eit_cid_desc[i].crid_byte!=NULL)
				{
					DB_FREE(dst->eit_cid_desc[i].crid_byte);
					dst->eit_cid_desc[i].crid_byte = NULL;
					dst->eit_cid_desc[i].crid_length = 0;
				}
			}
#endif
			dst->status = NODE_DIRTY;
			db_block.count --;
		}
		//add 2 view???
//		_add2view(dst, &epg_view);

		return ret;
	}

	return ERR_FAILED;
}