raw_posix_aligned(unsigned l, unsigned _align) : raw(l) {
align = _align;
assert((align >= sizeof(void *)) && (align & (align - 1)) == 0);
-#ifdef DARWIN
- data = (char *) valloc (len);
-#else
- data = 0;
- int r = ::posix_memalign((void**)(void*)&data, align, len);
- if (r)
- throw bad_alloc();
-#endif /* DARWIN */
+ data = mempool::buffer_data::alloc_char.allocate_aligned(len, align);
if (!data)
throw bad_alloc();
inc_total_alloc(len);
bdout << "raw_posix_aligned " << this << " alloc " << (void *)data << " l=" << l << ", align=" << align << " total_alloc=" << buffer::get_total_alloc() << bendl;
}
~raw_posix_aligned() {
- ::free((void*)data);
+ mempool::buffer_data::alloc_char.deallocate_aligned(data, len);
dec_total_alloc(len);
bdout << "raw_posix_aligned " << this << " free " << (void *)data << " " << buffer::get_total_alloc() << bendl;
}
h[2] = obj(1);
}
+TEST(mempool, bufferlist)
+{
+ bufferlist bl;
+ int len = 1048576;
+ size_t before = mempool::buffer_data::allocated_bytes();
+ cout << "before " << before << std::endl;
+ bl.append(buffer::create_aligned(len, 4096));
+ size_t after = mempool::buffer_data::allocated_bytes();
+ cout << "after " << after << std::endl;
+ ASSERT_GE(after, before + len);
+}
+
int main(int argc, char **argv)
{
vector<const char*> args;