aboutsummaryrefslogtreecommitdiffstats
path: root/extra/db46/patch.4.6.21.2
blob: 4e59f18afe438f90b3421868ce2cd36ee20eb470 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
*** mp/mp_region.c	2007-05-18 03:18:01.000000000 +1000
--- mp/mp_region.c	2008-06-24 13:15:56.000000000 +1000
***************
*** 249,256 ****
  		mtx_base = htab[0].mtx_hash;
  	}
  
  	if (mtx_base != MUTEX_INVALID)
! 		mtx_base += reginfo_off * htab_buckets;
  
  	/* Allocate hash table space and initialize it. */
  	if ((ret = __env_alloc(infop,
--- 249,262 ----
  		mtx_base = htab[0].mtx_hash;
  	}
  
+ 	/*
+ 	 * We preallocated all of the mutexes in a block, so for regions after
+ 	 * the first, we skip mutexes in use in earlier regions.  Each region
+ 	 * has the same number of buckets and there are two mutexes per hash
+ 	 * bucket (the bucket mutex and the I/O mutex).
+ 	 */
  	if (mtx_base != MUTEX_INVALID)
! 		mtx_base += reginfo_off * htab_buckets * 2;
  
  	/* Allocate hash table space and initialize it. */
  	if ((ret = __env_alloc(infop,