diff options
author | unknown <heikki@hundin.mysql.fi> | 2002-08-06 22:59:13 +0300 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2002-08-06 22:59:13 +0300 |
commit | a3edc742b94a94ff455ff549d7e2a9f5faa346a0 (patch) | |
tree | 0ed7a5d28436450a6e79787357c337dfae761d1d /innobase/mem/mem0pool.c | |
parent | cbb0dc14ccd3ff932edf5a29aa6af0ac210be4b9 (diff) | |
download | mariadb-git-a3edc742b94a94ff455ff549d7e2a9f5faa346a0.tar.gz |
Many files:
Merge InnoDB-3.23.52d
innobase/btr/btr0sea.c:
Merge InnoDB-3.23.52d
innobase/buf/buf0buf.c:
Merge InnoDB-3.23.52d
innobase/buf/buf0lru.c:
Merge InnoDB-3.23.52d
innobase/include/buf0buf.h:
Merge InnoDB-3.23.52d
innobase/include/ha0ha.h:
Merge InnoDB-3.23.52d
innobase/include/log0log.h:
Merge InnoDB-3.23.52d
innobase/include/os0file.h:
Merge InnoDB-3.23.52d
innobase/include/os0thread.h:
Merge InnoDB-3.23.52d
innobase/include/ha0ha.ic:
Merge InnoDB-3.23.52d
innobase/include/os0sync.ic:
Merge InnoDB-3.23.52d
innobase/include/srv0start.h:
Merge InnoDB-3.23.52d
innobase/include/sync0rw.ic:
Merge InnoDB-3.23.52d
innobase/include/sync0sync.ic:
Merge InnoDB-3.23.52d
innobase/include/ut0dbg.h:
Merge InnoDB-3.23.52d
innobase/include/univ.i:
Merge InnoDB-3.23.52d
innobase/lock/lock0lock.c:
Merge InnoDB-3.23.52d
innobase/log/log0log.c:
Merge InnoDB-3.23.52d
innobase/mem/mem0pool.c:
Merge InnoDB-3.23.52d
innobase/os/os0file.c:
Merge InnoDB-3.23.52d
innobase/os/os0thread.c:
Merge InnoDB-3.23.52d
innobase/srv/srv0srv.c:
Merge InnoDB-3.23.52d
innobase/srv/srv0start.c:
Merge InnoDB-3.23.52d
innobase/sync/sync0arr.c:
Merge InnoDB-3.23.52d
innobase/sync/sync0rw.c:
Merge InnoDB-3.23.52d
innobase/sync/sync0sync.c:
Merge InnoDB-3.23.52d
innobase/thr/thr0loc.c:
Merge InnoDB-3.23.52d
innobase/trx/trx0trx.c:
Merge InnoDB-3.23.52d
innobase/configure.in:
Merge InnoDB-3.23.52d
sql/ha_innobase.cc:
Merge InnoDB-3.23.52d
Diffstat (limited to 'innobase/mem/mem0pool.c')
-rw-r--r-- | innobase/mem/mem0pool.c | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/innobase/mem/mem0pool.c b/innobase/mem/mem0pool.c index 3681c8ef779..61cf1e50ce9 100644 --- a/innobase/mem/mem0pool.c +++ b/innobase/mem/mem0pool.c @@ -251,6 +251,7 @@ mem_pool_fill_free_list( mem_area_t* area; mem_area_t* area2; ibool ret; + char err_buf[500]; ut_ad(mutex_own(&(pool->mutex))); @@ -279,15 +280,34 @@ mem_pool_fill_free_list( area = UT_LIST_GET_FIRST(pool->free_list[i + 1]); if (area == NULL) { + if (UT_LIST_GET_LEN(pool->free_list[i + 1]) > 0) { + ut_print_timestamp(stderr); + + fprintf(stderr, +" InnoDB: Error: mem pool free list %lu length is %lu\n" +"InnoDB: though the list is empty!\n", + i + 1, UT_LIST_GET_LEN(pool->free_list[i + 1])); + } + ret = mem_pool_fill_free_list(i + 1, pool); if (ret == FALSE) { + return(FALSE); } area = UT_LIST_GET_FIRST(pool->free_list[i + 1]); } - + + if (UT_LIST_GET_LEN(pool->free_list[i + 1]) == 0) { + ut_sprintf_buf(err_buf, ((byte*)area) - 50, 100); + fprintf(stderr, +"InnoDB: Error: Removing element from mem pool free list %lu\n" +"InnoDB: though the list length is 0! Dump of 100 bytes around element:\n%s\n", + i + 1, err_buf); + ut_a(0); + } + UT_LIST_REMOVE(free_list, pool->free_list[i + 1], area); area2 = (mem_area_t*)(((byte*)area) + ut_2_exp(i)); @@ -320,6 +340,7 @@ mem_area_alloc( mem_area_t* area; ulint n; ibool ret; + char err_buf[500]; n = ut_2_log(ut_max(size + MEM_AREA_EXTRA_SIZE, MEM_AREA_MIN_SIZE)); @@ -342,7 +363,24 @@ mem_area_alloc( area = UT_LIST_GET_FIRST(pool->free_list[n]); } - ut_a(mem_area_get_free(area)); + if (!mem_area_get_free(area)) { + ut_sprintf_buf(err_buf, ((byte*)area) - 50, 100); + fprintf(stderr, +"InnoDB: Error: Removing element from mem pool free list %lu though the\n" +"InnoDB: element is not marked free! Dump of 100 bytes around element:\n%s\n", + n, err_buf); + ut_a(0); + } + + if (UT_LIST_GET_LEN(pool->free_list[n]) == 0) { + ut_sprintf_buf(err_buf, ((byte*)area) - 50, 100); + fprintf(stderr, +"InnoDB: Error: Removing element from mem pool free list %lu\n" +"InnoDB: though the list length is 0! Dump of 100 bytes around element:\n%s\n", + n, err_buf); + ut_a(0); + } + ut_ad(mem_area_get_size(area) == ut_2_exp(n)); mem_area_set_free(area, FALSE); @@ -413,6 +451,7 @@ mem_area_free( void* new_ptr; ulint size; ulint n; + char err_buf[500]; if (mem_out_of_mem_err_msg_count > 0) { /* It may be that the area was really allocated from the @@ -429,10 +468,18 @@ mem_area_free( area = (mem_area_t*) (((byte*)ptr) - MEM_AREA_EXTRA_SIZE); + if (mem_area_get_free(area)) { + ut_sprintf_buf(err_buf, ((byte*)area) - 50, 100); + fprintf(stderr, +"InnoDB: Error: Freeing element to mem pool free list though the\n" +"InnoDB: element is marked free! Dump of 100 bytes around element:\n%s\n", + err_buf); + ut_a(0); + } + size = mem_area_get_size(area); ut_ad(size != 0); - ut_a(!mem_area_get_free(area)); #ifdef UNIV_LIGHT_MEM_DEBUG if (((byte*)area) + size < pool->buf + pool->size) { |