}
};
+ class buffer::raw_claimed_char : public buffer::raw {
+ public:
+ MEMPOOL_CLASS_HELPERS();
+
+ explicit raw_claimed_char(unsigned l, char *b) : raw(b, l) {
+ inc_total_alloc(len);
+ bdout << "raw_claimed_char " << this << " alloc " << (void *)data
+ << " " << l << " " << buffer::get_total_alloc() << bendl;
+ }
+ ~raw_claimed_char() override {
+ dec_total_alloc(len);
+ bdout << "raw_claimed_char " << this << " free " << (void *)data
+ << " " << buffer::get_total_alloc() << bendl;
+ }
+ raw* clone_empty() override {
+ return new raw_char(len);
+ }
+ };
+
class buffer::raw_unshareable : public buffer::raw {
public:
MEMPOOL_CLASS_HELPERS();
return buffer::create_aligned(len, sizeof(size_t));
}
buffer::raw* buffer::claim_char(unsigned len, char *buf) {
- return new raw_char(len, buf);
+ return new raw_claimed_char(len, buf);
}
buffer::raw* buffer::create_malloc(unsigned len) {
return new raw_malloc(len);
MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_pipe, buffer_raw_pipe, buffer_meta);
#endif
MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_char, buffer_raw_char, buffer_meta);
+MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_claimed_char, buffer_raw_claimed_char,
+ buffer_meta);
MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_unshareable, buffer_raw_unshareable,
buffer_meta);
MEMPOOL_DEFINE_OBJECT_FACTORY(buffer::raw_static, buffer_raw_static,