*** buf_init.c.orig	Thu Sep 26 05:31:40 2002
--- buf_init.c	Wed Jun 18 14:29:08 2003
***************
*** 35,40 ****
--- 35,42 ----
  #include "utils/memutils.h"
  
  
+ #define FREELIST_QUEUE_SIZE 3
+ 
  /*
   *	if BMTRACE is defined, we trace the last 200 buffer allocations and
   *	deallocations in a circular buffer in shared memory.
***************
*** 50,55 ****
--- 52,58 ----
  int			Data_Descriptors;
  int			Free_List_Descriptor;
  int			Lookup_List_Descriptor;
+ int         AmQueue_List_Descriptor;
  int			Num_Descriptors;
  
  BufferDesc *BufferDescriptors;
***************
*** 134,141 ****
  
  	Data_Descriptors = NBuffers;
  	Free_List_Descriptor = Data_Descriptors;
! 	Lookup_List_Descriptor = Data_Descriptors + 1;
! 	Num_Descriptors = Data_Descriptors + 1;
  
  	/*
  	 * It's probably not really necessary to grab the lock --- if there's
--- 137,145 ----
  
  	Data_Descriptors = NBuffers;
  	Free_List_Descriptor = Data_Descriptors;
! 	AmQueue_List_Descriptor = Data_Descriptors+1;
! 	Lookup_List_Descriptor = Data_Descriptors +2;
! 	Num_Descriptors = Data_Descriptors + FREELIST_QUEUE_SIZE+1;
  
  	/*
  	 * It's probably not really necessary to grab the lock --- if there's
***************
*** 186,197 ****
  
  			buf->freeNext = i + 1;
  			buf->freePrev = i - 1;
! 
  			CLEAR_BUFFERTAG(&(buf->tag));
  			buf->buf_id = i;
  
  			buf->data = MAKE_OFFSET(block);
  			buf->flags = (BM_DELETED | BM_FREE | BM_VALID);
  			buf->refcount = 0;
  			buf->io_in_progress_lock = LWLockAssign();
  			buf->cntx_lock = LWLockAssign();
--- 190,202 ----
  
  			buf->freeNext = i + 1;
  			buf->freePrev = i - 1;
! 			buf->freeState=-1; 
  			CLEAR_BUFFERTAG(&(buf->tag));
  			buf->buf_id = i;
  
  			buf->data = MAKE_OFFSET(block);
  			buf->flags = (BM_DELETED | BM_FREE | BM_VALID);
+ 			
  			buf->refcount = 0;
  			buf->io_in_progress_lock = LWLockAssign();
  			buf->cntx_lock = LWLockAssign();
***************
*** 258,264 ****
  	size += hash_estimate_size(SHMEM_INDEX_SIZE, sizeof(ShmemIndexEnt));
  
  	/* size of buffer descriptors */
! 	size += MAXALIGN((NBuffers + 1) * sizeof(BufferDesc));
  
  	/* size of data pages */
  	size += NBuffers * MAXALIGN(BLCKSZ);
--- 263,269 ----
  	size += hash_estimate_size(SHMEM_INDEX_SIZE, sizeof(ShmemIndexEnt));
  
  	/* size of buffer descriptors */
! 	size += MAXALIGN((NBuffers + FREELIST_QUEUE_SIZE) * sizeof(BufferDesc));
  
  	/* size of data pages */
  	size += NBuffers * MAXALIGN(BLCKSZ);
***************
*** 272,274 ****
--- 277,289 ----
  
  	return size;
  }
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
