11#include " trade_v1/trade.hpp"
2+ #include " trade_v1/private/meta.hpp"
23
34#include < condition_variable>
45#include < cstdio>
@@ -155,20 +156,20 @@ struct trade_v1::Private::Static {
155156trade_v1::Private::access_base_t *
156157trade_v1::Private::insert (transaction_base_t *transaction,
157158 atom_mono_t *access_atom,
158- size_t align_m1,
159- size_t size) {
159+ const meta_t &meta) {
160160 auto root = transaction->m_accesses ;
161161
162162 auto access_ix = lock_ix_of (access_atom);
163163
164164 if (!root) {
165- auto access = Static::alloc_align (transaction, align_m1 );
166- if (Static::alloc_limit (transaction, access, size )) {
165+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
166+ if (Static::alloc_limit (transaction, access, meta. m_access_size )) {
167167 access->m_children [0 ] = nullptr ;
168168 access->m_children [1 ] = nullptr ;
169169 access->m_atom = access_atom;
170170 access->m_state = INITIAL;
171171 access->m_lock_ix = access_ix;
172+ access->m_destroy = meta.m_destroy ;
172173 return transaction->m_accesses = access;
173174 } else {
174175 throw transaction;
@@ -190,13 +191,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
190191 *side_near[0 ] = nullptr ;
191192 *side_near[1 ] = root->m_children [1 ];
192193 root->m_children [1 ] = side_root[1 ];
193- auto access = Static::alloc_align (transaction, align_m1 );
194- if (Static::alloc_limit (transaction, access, size )) {
194+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
195+ if (Static::alloc_limit (transaction, access, meta. m_access_size )) {
195196 access->m_children [0 ] = side_root[0 ];
196197 access->m_children [1 ] = root;
197198 access->m_atom = access_atom;
198199 access->m_state = INITIAL;
199200 access->m_lock_ix = access_ix;
201+ access->m_destroy = meta.m_destroy ;
200202 return transaction->m_accesses = access;
201203 } else {
202204 root->m_children [0 ] = side_root[0 ];
@@ -215,13 +217,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
215217 if (!next) {
216218 *side_near[0 ] = nullptr ;
217219 *side_near[1 ] = root;
218- auto access = Static::alloc_align (transaction, align_m1);
219- if (Static::alloc_limit (transaction, access, size)) {
220+ auto access =
221+ Static::alloc_align (transaction, meta.m_access_align_m1 );
222+ if (Static::alloc_limit (transaction, access, meta.m_access_size )) {
220223 access->m_children [0 ] = side_root[0 ];
221224 access->m_children [1 ] = side_root[1 ];
222225 access->m_atom = access_atom;
223226 access->m_state = INITIAL;
224227 access->m_lock_ix = access_ix;
228+ access->m_destroy = meta.m_destroy ;
225229 return transaction->m_accesses = access;
226230 } else {
227231 root->m_children [0 ] = side_root[0 ];
@@ -241,13 +245,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
241245 *side_near[0 ] = root->m_children [0 ];
242246 *side_near[1 ] = nullptr ;
243247 root->m_children [0 ] = side_root[0 ];
244- auto access = Static::alloc_align (transaction, align_m1 );
245- if (Static::alloc_limit (transaction, access, size )) {
248+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
249+ if (Static::alloc_limit (transaction, access, meta. m_access_size )) {
246250 access->m_children [0 ] = root;
247251 access->m_children [1 ] = side_root[1 ];
248252 access->m_atom = access_atom;
249253 access->m_state = INITIAL;
250254 access->m_lock_ix = access_ix;
255+ access->m_destroy = meta.m_destroy ;
251256 return transaction->m_accesses = access;
252257 } else {
253258 root->m_children [1 ] = side_root[1 ];
@@ -266,13 +271,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
266271 if (!next) {
267272 *side_near[0 ] = root;
268273 *side_near[1 ] = nullptr ;
269- auto access = Static::alloc_align (transaction, align_m1);
270- if (Static::alloc_limit (transaction, access, size)) {
274+ auto access =
275+ Static::alloc_align (transaction, meta.m_access_align_m1 );
276+ if (Static::alloc_limit (transaction, access, meta.m_access_size )) {
271277 access->m_children [0 ] = side_root[0 ];
272278 access->m_children [1 ] = side_root[1 ];
273279 access->m_atom = access_atom;
274280 access->m_state = INITIAL;
275281 access->m_lock_ix = access_ix;
282+ access->m_destroy = meta.m_destroy ;
276283 return transaction->m_accesses = access;
277284 } else {
278285 root->m_children [1 ] = side_root[1 ];
0 commit comments