On Wed, Oct 03, 2001 at 11:19:34AM -0700, Kevin Mallory wrote:
>...
[ patch allows custom caching mechanisms ]
>...
> The patch simply adds a new callback (the 'filter callback') into the
> handling in buff.c's routine writev_it_all() and buff_write().
>
> When not registered, there is no performance impact to users. This
> filter callback makes it possible for SpiderCache to correctly intercept
> the request as it is being processed, thus allowing our product to perform
> dynamic page caching.
+1 on including this patch.
I see no bad effects, and it has definite utility.
Cheers,
-g
>...
> *** orig_buff.c Tue Aug 21 17:45:34 2001
> --- spidercache_buff.c Tue Aug 21 17:45:35 2001
> ***************
> *** 356,361 ****
> --- 356,365 ----
> {
> int rv;
>
> + if (fb->filter_callback != NULL) {
> + fb->filter_callback(fb, buf, nbyte);
> + }
> +
> #if defined(WIN32) || defined(NETWARE)
> if (fb->flags & B_SOCKET) {
> rv = sendwithtimeout(fb->fd, buf, nbyte, 0);
> ***************
> *** 438,443 ****
> --- 442,450 ----
> (size_t) SF_UNBOUND, 1, SF_WRITE);
> #endif
>
> + fb->callback_data = NULL;
> + fb->filter_callback = NULL;
> +
> return fb;
> }
>
> ***************
> *** 1077,1082 ****
> --- 1084,1095 ----
> static int writev_it_all(BUFF *fb, struct iovec *vec, int nvec)
> {
> int i, rv;
> +
> + if (fb->filter_callback != NULL) {
> + for (i = 0; i < nvec; i++) {
> + fb->filter_callback(fb, vec[i].iov_base, vec[i].iov_len);
> + }
> + }
>
> /* while it's nice an easy to build the vector and crud, it's painful
> * to deal with a partial writev()
> *** orig_buff.h Tue Aug 21 17:45:34 2001
> --- spidercache_buff.h Tue Aug 21 17:45:35 2001
> ***************
> *** 129,134 ****
> --- 129,138 ----
> Sfio_t *sf_in;
> Sfio_t *sf_out;
> #endif
> +
> + void *callback_data;
> + void (*filter_callback)(BUFF *, const void *, int );
> +
> };
>
> #ifdef B_SFIO
--
Greg Stein, http://www.lyra.org/