Sha256: 6973eecb1b2ba3438ea7d85f8b5ece0486ed7850d3f23bbb6c4de85ecd557af5
Contents?: true
Size: 1.19 KB
Versions: 2
Compression:
Stored size: 1.19 KB
Contents
#include "um.h" inline long buffer_size(long len) { len--; len |= len >> 1; len |= len >> 2; len |= len >> 4; len |= len >> 8; len |= len >> 16; len++; return (len > 4096) ? len : 4096; } inline struct um_buffer *um_buffer_checkout(struct um *machine, int len) { struct um_buffer *buffer = machine->buffer_freelist; if (buffer) machine->buffer_freelist = buffer->next; else { buffer = malloc(sizeof(struct um_buffer)); memset(buffer, 0, sizeof(struct um_buffer)); } if (buffer->len < len) { if (buffer->ptr) { free(buffer->ptr); buffer->ptr = NULL; } buffer->len = buffer_size(len); if (posix_memalign(&buffer->ptr, 4096, buffer->len)) rb_raise(rb_eRuntimeError, "Failed to allocate buffer"); } return buffer; } inline void um_buffer_checkin(struct um *machine, struct um_buffer *buffer) { buffer->next = machine->buffer_freelist; machine->buffer_freelist = buffer; } inline void um_free_buffer_linked_list(struct um *machine) { struct um_buffer *buffer = machine->buffer_freelist; while (buffer) { struct um_buffer *next = buffer->next; if (buffer->ptr) free(buffer->ptr); free(buffer); buffer = next; } }
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
uringmachine-0.5.1 | ext/um/um_buffer.c |
uringmachine-0.5 | ext/um/um_buffer.c |