Exemplo n.º 1
0
Arquivo: blk.c Projeto: taysom/tau
static buf_s *victim (void)
{
	buf_s	*buf;
	unint	wrap = 0;

	for (;;) {
		++Clock;
		if (Clock == &Buf[Num_bufs]) {
			Clock = Buf;
			if (++wrap > 2) {
				bdump();
				eprintf("All buffers in use");
				return NULL;
			}
		}
		buf = Clock;
		if (buf->b_use < 0) {
			bflush(buf);
			buf->b_use = 1;
			unhash(buf);
			return buf;
		}
		if (buf->b_use == 0) {
			buf->b_use = -1;
		}
	}
}
Exemplo n.º 2
0
Arquivo: cache.c Projeto: taysom/tau
static buf_s *victim (void)
{
	buf_s	*buf;
	unint	wrap = 0;

	for (;;) {
		++Clock;
		if (Clock == &Buf[Num_bufs]) {
			Clock = Buf;
			if (++wrap > 2) {
				bdump();
				fatal("All buffers in use");
				return NULL;
			}
		}
		buf = Clock;
		if (buf->b_use < 0) {
			if (buf->b_ant.a_state == ANT_FLUSHING) continue;
			bflush(buf);
			aver(buf->b_ant.a_state != ANT_FLUSHING);
			aver(buf->b_ant.a_state != ANT_DIRTY);
			buf->b_use = 1;
			rmv(buf);
			return buf;
		}
		if (buf->b_use == 0) {
			buf->b_use = -1;
		}
	}
}
Exemplo n.º 3
0
int
main(int argc, char **argv)
{
	char *p;

	progname = argv[0];
	(void) argc;

	if ((p = argv[1])) {
		int pagf;
		int datf;
		char *name;
		int n;

		name = (char *) malloc((n = strlen(p)) + sizeof(DBM_PAGFEXT));
		if (!name)
		    oops("cannot get memory");

		strcpy(name, p);
		strcpy(name + n, DBM_PAGFEXT);

		if ((pagf = open(name, O_RDONLY)) < 0)
			oops("cannot open %s.", name);

		sdump(pagf);
		free(name);

		name = (char *) malloc(n + sizeof(DBM_DATFEXT));
		if (!name)
		    oops("cannot get memory");

		strcpy(name, p);
		strcpy(name + n, DBM_DATFEXT);

		if ((datf = open(name, O_RDONLY)) >= 0)
			bdump(datf);

		free(name);
	}
	else
		oops("usage: %s dbname", progname);

	return 0;
}
Exemplo n.º 4
0
int relay_tee(PCStr(arg),int src,int dst1,int dst2,int *rccp,int *wccp1,int *wccp2)
{	int rcc,wcc,wc1;
/*
	CStr(buf,0x4000);
*/
	CStr(buf,0x10000);
	int isize = 0x4000;

	*wccp1 = 0;
	if( wccp2 ) *wccp2 = 0;

	/*
	rcc = read(src,buf,sizeof(buf));
	*/
	rcc = read(src,buf,QVSSize(buf,isize));
	if( rcc <= 0 && 0 <= top_fd(src,0) ){
		int pop_fd(int fd,int rw);
		if( pop_fd(src,0) ){
			syslog_ERROR("relay_tee(%d) -> pop_fd()\n",src);
			errno = EAGAIN;
			*rccp = 0;
			return -1;
		}
	}
	*rccp = rcc;
	if( rcc <= 0 )
	{
		lastpackLeng = rcc;
		bzero(lastpack,sizeof(lastpack));
		return rcc;
	}

	lastpackLeng = rcc;
	bcopy(buf,lastpack,8<rcc?8:rcc);

	if( dump_tcprelay )
		bdump(src,dst1,buf,rcc);

	/*
	wcc = 0;
	while( wcc < rcc ){
		wc1 = write(dst1,buf,rcc);
		if( wc1 <= 0 )
			break;
		wcc += wc1;
	}
	*/
	wcc = writes(isize,src,dst1,buf,rcc,&wc1);
	*wccp1 = wcc;
	if( dst2 < 0 || wc1 <= 0 )
		return wc1;

	/*
	wcc = 0;
	while( wcc < rcc ){
		wc1 = write(dst2,buf,rcc);
		if( wc1 <= 0 )
			break;
		wcc += wc1;
	}
	*/
	wcc = writes(isize,src,dst2,buf,rcc,&wc1);
	*wccp2 = wcc;
	return wc1;
}
Exemplo n.º 5
0
Arquivo: main.c Projeto: taysom/tau
int dumpp (int argc, char *argv[])
{
	//baudit("cmd line");
	bdump();
	return 0;
}