//bench/bw_door.c
void
writer(int doorfd)
{
	int		ntowrite;
	door_arg_t	arg;

	arg.desc_ptr = NULL;	/*    */
	arg.desc_num = 0;
	arg.rbuf = NULL;		/*    */
	arg.rsize = 0;

	for ( ; ; ) {
		Read(contpipe[0], &ntowrite, sizeof(ntowrite));

		while (ntowrite > 0) {
			arg.data_ptr = buf;
			arg.data_size = xfersize;
			Door_call(doorfd, &arg);
			ntowrite -= xfersize;
		}
	}
}

static int	ntoread, nread;

void
server(void *cookie, char *argp, size_t arg_size,
       door_desc_t *dp, size_t n_descriptors)
{
	char	c;

	nread += arg_size;
	if (nread >= ntoread)
		Write(contpipe[0], &c, 1);	/*   */

    Door_return(NULL, 0, NULL, 0);
}

void
reader(int doorfd, int nbytes)
{
	char	c;
	ssize_t	n;

	ntoread = nbytes;	/*     */
	nread = 0;

	Write(contpipe[1], &nbytes, sizeof(nbytes));

	if ( (n = Read(contpipe[1], &c, 1)) != 1)
		err_quit("reader: pipe read returned %d", n);
}
