88#include  < iostream> 
99
1010static  void  *
11- pta_alloc ();
11+ pta_alloc (void  *ctx );
1212static  void 
13- pta_free (void  *p);
13+ pta_free (void  *ctx,  void  * p);
1414
1515#define  PROV_BLOCK_SIZE  16 
1616#define  PROV_EXTENT_SIZE  64 
@@ -41,8 +41,9 @@ unsigned int alloc_err_inj_countdown = 0;
4141#define  MATRAS_VERSION_COUNT  8 
4242
4343static  void  *
44- pta_alloc ()
44+ pta_alloc (void  *ctx )
4545{
46+ 	static_cast <void >(ctx);
4647	if  (alloc_err_inj_enabled) {
4748		if  (alloc_err_inj_countdown == 0 )
4849			return  0 ;
@@ -54,8 +55,9 @@ pta_alloc()
5455	return  p;
5556}
5657static  void 
57- pta_free (void  *p)
58+ pta_free (void  *ctx,  void  * p)
5859{
60+ 	static_cast <void >(ctx);
5961	check (AllocatedBlocks.find (p) != AllocatedBlocks.end (), " Bad free" 
6062	AllocatedBlocks.erase (p);
6163	delete []  static_cast <char  *>(p);
@@ -73,7 +75,7 @@ void matras_alloc_test()
7375
7476	alloc_err_inj_enabled = false ;
7577	for  (unsigned  int  i = 0 ; i <= maxCapacity; i++) {
76- 		matras_create (&mat, PROV_EXTENT_SIZE, PROV_BLOCK_SIZE, pta_alloc, pta_free);
78+ 		matras_create (&mat, PROV_EXTENT_SIZE, PROV_BLOCK_SIZE, pta_alloc, pta_free,  NULL );
7779		check (1u  << mat.log2_capacity  == maxCapacity, " Wrong capacity!" 
7880		AllocatedItems.clear ();
7981		for  (unsigned  int  j = 0 ; j < i; j++) {
@@ -116,7 +118,7 @@ void matras_alloc_test()
116118	}
117119
118120	for  (unsigned  int  i = 0 ; i <= maxCapacity; i++) {
119- 		matras_create (&mat, PROV_EXTENT_SIZE, PROV_BLOCK_SIZE, pta_alloc, pta_free);
121+ 		matras_create (&mat, PROV_EXTENT_SIZE, PROV_BLOCK_SIZE, pta_alloc, pta_free,  NULL );
120122		for  (unsigned  int  j = 0 ; j < i; j++) {
121123			unsigned  int  res = 0 ;
122124			(void ) matras_alloc (&mat, &res);
@@ -132,7 +134,7 @@ void matras_alloc_test()
132134
133135	alloc_err_inj_enabled = true ;
134136	for  (unsigned  int  i = 0 ; i <= maxCapacity; i++) {
135- 		matras_create (&mat, PROV_EXTENT_SIZE, PROV_BLOCK_SIZE, pta_alloc, pta_free);
137+ 		matras_create (&mat, PROV_EXTENT_SIZE, PROV_BLOCK_SIZE, pta_alloc, pta_free,  NULL );
136138
137139		alloc_err_inj_countdown = i;
138140
@@ -154,17 +156,18 @@ void matras_alloc_test()
154156
155157typedef  uint64_t  type_t ;
156158const  size_t  VER_EXTENT_SIZE = 512 ;
157- int  extents_in_use = 0 ;
158159
159- void  *all ()
160+ void  *all (void  *ctx )
160161{
161- 	extents_in_use++;
162+ 	long  *extents_in_use = static_cast <long  *>(ctx);
163+ 	++*extents_in_use;
162164	return  malloc (VER_EXTENT_SIZE);
163165}
164166
165- void  dea (void  *p)
167+ void  dea (void  *ctx,  void  * p)
166168{
167- 	extents_in_use--;
169+ 	long  *extents_in_use = static_cast <long  *>(ctx);
170+ 	--*extents_in_use;
168171	free (p);
169172}
170173
@@ -192,7 +195,8 @@ matras_vers_test()
192195	int  use_mask = 1 ;
193196	int  cur_num_or_ver = 1 ;
194197	struct  matras  local;
195- 	matras_create (&local, VER_EXTENT_SIZE, sizeof (type_t ), all, dea);
198+ 	long  extents_in_use = 0 ;
199+ 	matras_create (&local, VER_EXTENT_SIZE, sizeof (type_t ), all, dea, &extents_in_use);
196200	type_t  val = 0 ;
197201	for  (int  s = 10 ; s < 8000 ; s = int (s * 1.5 )) {
198202		for  (int  k = 0 ; k < 800 ; k++) {
@@ -267,7 +271,8 @@ matras_gh_1145_test()
267271	std::cout << " Testing matras gh-1145 test..." 
268272
269273	struct  matras  local;
270- 	matras_create (&local, VER_EXTENT_SIZE, sizeof (type_t ), all, dea);
274+ 	long  extents_in_use = 0 ;
275+ 	matras_create (&local, VER_EXTENT_SIZE, sizeof (type_t ), all, dea, &extents_in_use);
271276	struct  matras_view  view;
272277	matras_create_read_view (&local, &view);
273278	matras_id_t  id;
0 commit comments