| 3781 | |
| 3782 | |
| 3783 | void Query_cache::split_block(Query_cache_block *block, size_t len) |
| 3784 | { |
| 3785 | DBUG_ENTER("Query_cache::split_block"); |
| 3786 | Query_cache_block *new_block = (Query_cache_block*)(((uchar*) block)+len); |
| 3787 | |
| 3788 | new_block->init(block->length - len); |
| 3789 | total_blocks++; |
| 3790 | block->length=len; |
| 3791 | new_block->pnext = block->pnext; |
| 3792 | block->pnext = new_block; |
| 3793 | new_block->pprev = block; |
| 3794 | new_block->pnext->pprev = new_block; |
| 3795 | |
| 3796 | if (block->type == Query_cache_block::FREE) |
| 3797 | { |
| 3798 | // if block was free then it already joined with all free neighbours |
| 3799 | insert_into_free_memory_list(new_block); |
| 3800 | } |
| 3801 | else |
| 3802 | free_memory_block(new_block); |
| 3803 | |
| 3804 | DBUG_PRINT("qcache", ("split %p (%zu) new %p", |
| 3805 | block, len, new_block)); |
| 3806 | DBUG_VOID_RETURN; |
| 3807 | } |
| 3808 | |
| 3809 | |
| 3810 | Query_cache_block * |