Commit bc07ccf8 authored by Rich Prohaska's avatar Rich Prohaska

#182 fix dbt array memory leak

parent d06d7363
...@@ -1197,9 +1197,8 @@ static int generate_row_for_put( ...@@ -1197,9 +1197,8 @@ static int generate_row_for_put(
); );
} }
ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, table_arg) ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, table_arg) {
// flags defined in sql\handler.h TOKUDB_HANDLER_DBUG_ENTER("");
{
share = NULL; share = NULL;
int_table_flags = HA_REC_NOT_IN_SEQ | HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_PRIMARY_KEY_IN_READ_INDEX | HA_PRIMARY_KEY_REQUIRED_FOR_POSITION | int_table_flags = HA_REC_NOT_IN_SEQ | HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_PRIMARY_KEY_IN_READ_INDEX | HA_PRIMARY_KEY_REQUIRED_FOR_POSITION |
HA_FILE_BASED | HA_AUTO_PART_KEY | HA_TABLE_SCAN_ON_INDEX | HA_CAN_WRITE_DURING_OPTIMIZE; HA_FILE_BASED | HA_AUTO_PART_KEY | HA_TABLE_SCAN_ON_INDEX | HA_CAN_WRITE_DURING_OPTIMIZE;
...@@ -1256,9 +1255,18 @@ ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, t ...@@ -1256,9 +1255,18 @@ ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, t
tokudb_active_index = MAX_KEY; tokudb_active_index = MAX_KEY;
invalidate_icp(); invalidate_icp();
trx_handler_list.data = this; trx_handler_list.data = this;
TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
ha_tokudb::~ha_tokudb() { ha_tokudb::~ha_tokudb() {
TOKUDB_HANDLER_DBUG_ENTER("");
for (uint32_t i = 0; i < sizeof(mult_key_dbt_array)/sizeof(mult_key_dbt_array[0]); i++) {
toku_dbt_array_destroy(&mult_key_dbt_array[i]);
}
for (uint32_t i = 0; i < sizeof(mult_rec_dbt_array)/sizeof(mult_rec_dbt_array[0]); i++) {
toku_dbt_array_destroy(&mult_rec_dbt_array[i]);
}
TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
// //
...@@ -3010,7 +3018,7 @@ void ha_tokudb::init_hidden_prim_key_info() { ...@@ -3010,7 +3018,7 @@ void ha_tokudb::init_hidden_prim_key_info() {
share->status |= STATUS_PRIMARY_KEY_INIT; share->status |= STATUS_PRIMARY_KEY_INIT;
} }
tokudb_pthread_mutex_unlock(&share->mutex); tokudb_pthread_mutex_unlock(&share->mutex);
DBUG_VOID_RETURN; TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
...@@ -3293,7 +3301,7 @@ void ha_tokudb::start_bulk_insert(ha_rows rows) { ...@@ -3293,7 +3301,7 @@ void ha_tokudb::start_bulk_insert(ha_rows rows) {
share->try_table_lock = false; share->try_table_lock = false;
tokudb_pthread_mutex_unlock(&share->mutex); tokudb_pthread_mutex_unlock(&share->mutex);
} }
DBUG_VOID_RETURN; TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
// //
...@@ -4649,7 +4657,7 @@ void ha_tokudb::read_key_only(uchar * buf, uint keynr, DBT const *found_key) { ...@@ -4649,7 +4657,7 @@ void ha_tokudb::read_key_only(uchar * buf, uint keynr, DBT const *found_key) {
if (!(hidden_primary_key && keynr == primary_key)) { if (!(hidden_primary_key && keynr == primary_key)) {
unpack_key(buf, found_key, keynr); unpack_key(buf, found_key, keynr);
} }
DBUG_VOID_RETURN; TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
// //
...@@ -5821,7 +5829,7 @@ void ha_tokudb::position(const uchar * record) { ...@@ -5821,7 +5829,7 @@ void ha_tokudb::position(const uchar * record) {
// //
memcpy(ref, &key.size, sizeof(uint32_t)); memcpy(ref, &key.size, sizeof(uint32_t));
} }
DBUG_VOID_RETURN; TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
// //
...@@ -7521,7 +7529,7 @@ void ha_tokudb::get_auto_increment(ulonglong offset, ulonglong increment, ulongl ...@@ -7521,7 +7529,7 @@ void ha_tokudb::get_auto_increment(ulonglong offset, ulonglong increment, ulongl
*first_value = nr; *first_value = nr;
*nb_reserved_values = nb_desired_values; *nb_reserved_values = nb_desired_values;
tokudb_pthread_mutex_unlock(&share->mutex); tokudb_pthread_mutex_unlock(&share->mutex);
DBUG_VOID_RETURN; TOKUDB_HANDLER_DBUG_VOID_RETURN;
} }
bool ha_tokudb::is_optimize_blocking() { bool ha_tokudb::is_optimize_blocking() {
......
...@@ -215,23 +215,22 @@ extern ulong tokudb_debug; ...@@ -215,23 +215,22 @@ extern ulong tokudb_debug;
#define TOKUDB_DEBUG_CHECK (1<<14) #define TOKUDB_DEBUG_CHECK (1<<14)
#define TOKUDB_DEBUG_ANALYZE (1<<15) #define TOKUDB_DEBUG_ANALYZE (1<<15)
#define TOKUDB_TRACE(f, ...) \ #define TOKUDB_TRACE(f, ...) { \
fprintf(stderr, "%u %s:%u %s " f "\n", my_tid(), __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); fprintf(stderr, "%u %s:%u %s " f "\n", my_tid(), __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); \
}
static inline unsigned int my_tid() { static inline unsigned int my_tid() {
return (unsigned int)toku_os_gettid(); return (unsigned int)toku_os_gettid();
} }
#define TOKUDB_DBUG_ENTER(f, ...) \ #define TOKUDB_DBUG_ENTER(f, ...) { \
{ \
if (tokudb_debug & TOKUDB_DEBUG_ENTER) { \ if (tokudb_debug & TOKUDB_DEBUG_ENTER) { \
TOKUDB_TRACE(f, ##__VA_ARGS__); \ TOKUDB_TRACE(f, ##__VA_ARGS__); \
} \ } \
} \ } \
DBUG_ENTER(__FUNCTION__); DBUG_ENTER(__FUNCTION__);
#define TOKUDB_DBUG_RETURN(r) \ #define TOKUDB_DBUG_RETURN(r) { \
{ \
int rr = (r); \ int rr = (r); \
if ((tokudb_debug & TOKUDB_DEBUG_RETURN) || (rr != 0 && (tokudb_debug & TOKUDB_DEBUG_ERROR))) { \ if ((tokudb_debug & TOKUDB_DEBUG_RETURN) || (rr != 0 && (tokudb_debug & TOKUDB_DEBUG_ERROR))) { \
TOKUDB_TRACE("return %d", rr); \ TOKUDB_TRACE("return %d", rr); \
...@@ -242,16 +241,14 @@ static inline unsigned int my_tid() { ...@@ -242,16 +241,14 @@ static inline unsigned int my_tid() {
#define TOKUDB_HANDLER_TRACE(f, ...) \ #define TOKUDB_HANDLER_TRACE(f, ...) \
fprintf(stderr, "%u %p %s:%u ha_tokudb::%s " f "\n", my_tid(), this, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); fprintf(stderr, "%u %p %s:%u ha_tokudb::%s " f "\n", my_tid(), this, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
#define TOKUDB_HANDLER_DBUG_ENTER(f, ...) \ #define TOKUDB_HANDLER_DBUG_ENTER(f, ...) { \
{ \
if (tokudb_debug & TOKUDB_DEBUG_ENTER) { \ if (tokudb_debug & TOKUDB_DEBUG_ENTER) { \
TOKUDB_HANDLER_TRACE(f, ##__VA_ARGS__); \ TOKUDB_HANDLER_TRACE(f, ##__VA_ARGS__); \
} \ } \
} \ } \
DBUG_ENTER(__FUNCTION__); DBUG_ENTER(__FUNCTION__);
#define TOKUDB_HANDLER_DBUG_RETURN(r) \ #define TOKUDB_HANDLER_DBUG_RETURN(r) { \
{ \
int rr = (r); \ int rr = (r); \
if ((tokudb_debug & TOKUDB_DEBUG_RETURN) || (rr != 0 && (tokudb_debug & TOKUDB_DEBUG_ERROR))) { \ if ((tokudb_debug & TOKUDB_DEBUG_RETURN) || (rr != 0 && (tokudb_debug & TOKUDB_DEBUG_ERROR))) { \
TOKUDB_HANDLER_TRACE("return %d", rr); \ TOKUDB_HANDLER_TRACE("return %d", rr); \
...@@ -259,6 +256,13 @@ static inline unsigned int my_tid() { ...@@ -259,6 +256,13 @@ static inline unsigned int my_tid() {
DBUG_RETURN(rr); \ DBUG_RETURN(rr); \
} }
#define TOKUDB_HANDLER_DBUG_VOID_RETURN { \
if (tokudb_debug & TOKUDB_DEBUG_RETURN) { \
TOKUDB_HANDLER_TRACE("return"); \
} \
DBUG_VOID_RETURN; \
}
#define TOKUDB_DBUG_DUMP(s, p, len) \ #define TOKUDB_DBUG_DUMP(s, p, len) \
{ \ { \
TOKUDB_TRACE("%s", s); \ TOKUDB_TRACE("%s", s); \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment