Browse Source

TABLE_SHARE::free_frm_image() method to free the memory

allocated by the same allocator as in TABLE_SHARE::read_frm_image()
pull/57/head
Sergei Golubchik 13 years ago
parent
commit
9c089b04b3
  1. 7
      sql/table.cc
  2. 26
      sql/table.h
  3. 2
      storage/archive/ha_archive.cc

7
sql/table.cc

@ -2137,6 +2137,13 @@ bool TABLE_SHARE::read_frm_image(const uchar **frm, size_t *len)
}
void TABLE_SHARE::free_frm_image(const uchar *frm)
{
if (frm)
my_free(const_cast<uchar*>(frm));
}
/*
@brief
Clear GET_FIXED_FIELDS_FLAG in all fields of a table

26
sql/table.h

@ -991,12 +991,38 @@ struct TABLE_SHARE
uint actual_n_key_parts(THD *thd);
LEX_CUSTRING *frm_image; ///< only during CREATE TABLE (@sa ha_create_table)
/*
populates TABLE_SHARE from the table description in the binary frm image.
if 'write' is true, this frm image is also written into a corresponding
frm file, that serves as a persistent metadata cache to avoid
discovering the table over and over again
*/
int init_from_binary_frm_image(THD *thd, bool write,
const uchar *frm_image, size_t frm_length);
/*
populates TABLE_SHARE from the table description, specified as the
complete CREATE TABLE sql statement.
if 'write' is true, this frm image is also written into a corresponding
frm file, that serves as a persistent metadata cache to avoid
discovering the table over and over again
*/
int init_from_sql_statement_string(THD *thd, bool write,
const char *sql, size_t sql_length);
/*
writes the frm image to an frm file, corresponding to this table
*/
bool write_frm_image(const uchar *frm_image, size_t frm_length);
/*
returns an frm image for this table.
the memory is allocated and must be freed later
*/
bool read_frm_image(const uchar **frm_image, size_t *frm_length);
/* frees the memory allocated in read_frm_image */
void free_frm_image(const uchar *frm);
};

2
storage/archive/ha_archive.cc

@ -764,7 +764,7 @@ int ha_archive::create(const char *name, TABLE *table_arg,
if (!table_arg->s->read_frm_image(&frm_ptr, &frm_len))
{
azwrite_frm(&create_stream, frm_ptr, frm_len);
my_free(const_cast<uchar*>(frm_ptr));
table_arg->s->free_frm_image(frm_ptr);
}
if (create_info->comment.str)

Loading…
Cancel
Save