bugfix: gate ringbuffer alloc

This commit is contained in:
云风
2012-09-27 10:19:00 +08:00
parent b21e08fc58
commit db18839dc5
3 changed files with 15 additions and 11 deletions

View File

@@ -69,12 +69,16 @@ _alloc(struct ringbuffer * rb, int total_size , int size) {
blk->next = -1;
blk->id = -1;
struct ringbuffer_block * next = block_next(rb, blk);
rb->head = block_offset(rb, next);
if (align_length < total_size) {
next->length = total_size - align_length;
if (next->length >= sizeof(struct ringbuffer_block)) {
next->id = -1;
if (next) {
rb->head = block_offset(rb, next);
if (align_length < total_size) {
next->length = total_size - align_length;
if (next->length >= sizeof(struct ringbuffer_block)) {
next->id = -1;
}
}
} else {
rb->head = 0;
}
return blk;
}
@@ -129,7 +133,7 @@ ringbuffer_collect(struct ringbuffer * rb) {
}
void
ringbuffer_resize(struct ringbuffer * rb, struct ringbuffer_block * blk, int size) {
ringbuffer_shrink(struct ringbuffer * rb, struct ringbuffer_block * blk, int size) {
if (size == 0) {
rb->head = block_offset(rb, blk);
return;