Example #1
0
int db_free(database_p _dbp)
{
	tbl_cache_p _tbc = NULL, _tbc0=NULL;
	if(!_dbp)
		return -1;

	_tbc = _dbp->tables;

	while(_tbc)
	{
		_tbc0 = _tbc->next;
		tbl_cache_free(_tbc);
		_tbc = _tbc0;
	}
	
	if(_dbp->dbenv)
		_dbp->dbenv->close(_dbp->dbenv, 0);
	
	if(_dbp->name.s)
		pkg_free(_dbp->name.s);
	
	pkg_free(_dbp);

	return 0;
}
Example #2
0
int dbt_db_del_table(dbt_cache_p _dc, str *_s)
{
	tbl_cache_p _tbc = NULL;
	if(!_dc || !_s || !_s->s || _s->len<=0)
		return -1;

	lock_get(&_dc->sem);
	if(!_dc->dbp)
	{
		lock_release(&_dc->sem);
		return -1;
	}

	_tbc = _dc->dbp->tables;
	while(_tbc)
	{
		if(_tbc->dtp)
		{
			lock_get(&_tbc->sem);
			if(_tbc->dtp->name.len == _s->len 
				&& !strncasecmp(_tbc->dtp->name.s, _s->s, _s->len))
			{
				if(_tbc->prev)
					(_tbc->prev)->next = _tbc->next;
				else
					_dc->dbp->tables = _tbc->next;
	
				if(_tbc->next)
					(_tbc->next)->prev = _tbc->prev;
				break;
			}
			lock_release(&_tbc->sem);
		}
		_tbc = _tbc->next;
	}

	lock_release(&_dc->sem);

	tbl_cache_free(_tbc);
	
	return 0;
}
Example #3
0
int dbt_db_free(dbt_db_p _dbp)
{
	tbl_cache_p _tbc = NULL, _tbc0=NULL;
	if(!_dbp)
		return -1;

	_tbc = _dbp->tables;

	while(_tbc)
	{
		_tbc0 = _tbc;
		tbl_cache_free(_tbc0);
		_tbc = _tbc->next;
	}
	
	if(_dbp->name.s)
		shm_free(_dbp->name.s);
	
	shm_free(_dbp);

	return 0;
}