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..." << std::endl;
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