323 {
324 if(n > m_page_size) {
325 return nullptr;
326 }
327
328 const size_t n_bucket = choose_bucket(n);
329
330 if(n_bucket > 0) {
332
333 std::deque<Bucket>& buckets = m_buckets_for[n_bucket];
334
335
336
337
338
339
340
341 for(auto& bucket : buckets) {
342 if(uint8_t* p = bucket.alloc()) {
343 return p;
344 }
345
346
347
348 }
349
350 if(!m_free_pages.empty()) {
351 uint8_t* ptr = m_free_pages[0];
352 m_free_pages.pop_front();
353#if defined(BOTAN_MEM_POOL_USE_MMU_PROTECTIONS)
355#endif
356 buckets.push_front(Bucket(ptr, m_page_size, n_bucket));
357 void* p = buckets[0].alloc();
359 return p;
360 }
361 }
362
363
364 return nullptr;
365}
#define BOTAN_ASSERT_NOMSG(expr)
secure_vector< T > lock(const std::vector< T > &in)
lock_guard< T > lock_guard_type