summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tomas@mc05.(none)>2004-06-03 16:31:47 +0200
committerunknown <tomas@mc05.(none)>2004-06-03 16:31:47 +0200
commit0f7a9f61023d97b60286ed7b72f27a9fb343f083 (patch)
treecb76f258a4d3763bbf91984eeffcb1c3e0351d61
parent54d8f52ca2b4072ff215888e4930d43c85f9ce44 (diff)
parentbf54e9f44bc15afee74fa9e8eb799f9a4b73a02f (diff)
downloadmariadb-git-0f7a9f61023d97b60286ed7b72f27a9fb343f083.tar.gz
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1
into mc05.(none):/space2/tomas/mm
-rw-r--r--innobase/fil/fil0fil.c87
-rw-r--r--innobase/os/os0file.c22
2 files changed, 64 insertions, 45 deletions
diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c
index 38d06c5bfba..a200116797a 100644
--- a/innobase/fil/fil0fil.c
+++ b/innobase/fil/fil0fil.c
@@ -1409,6 +1409,7 @@ fil_read_flushed_lsn_and_arch_log_no(
byte* buf;
byte* buf2;
dulint flushed_lsn;
+
buf2 = ut_malloc(2 * UNIV_PAGE_SIZE);
/* Align the memory for a possible read from a raw device */
buf = ut_align(buf2, UNIV_PAGE_SIZE);
@@ -1852,8 +1853,6 @@ try_again:
success = os_file_delete(path);
}
- mem_free(path);
-
if (success) {
#ifndef UNIV_HOTBACKUP
/* Write a log record about the deletion of the .ibd
@@ -1869,9 +1868,13 @@ try_again:
fil_op_write_log(MLOG_FILE_DELETE, id, path, NULL, &mtr);
mtr_commit(&mtr);
#endif
+ mem_free(path);
+
return(TRUE);
}
+ mem_free(path);
+
return(FALSE);
}
@@ -2148,6 +2151,7 @@ fil_create_new_single_table_tablespace(
os_file_t file;
ibool ret;
ulint err;
+ byte* buf2;
byte* page;
ibool success;
char* path;
@@ -2191,12 +2195,14 @@ fil_create_new_single_table_tablespace(
return(DB_ERROR);
}
- page = ut_malloc(UNIV_PAGE_SIZE);
+ buf2 = ut_malloc(2 * UNIV_PAGE_SIZE);
+ /* Align the memory for file i/o if we might have O_DIRECT set */
+ page = ut_align(buf2, UNIV_PAGE_SIZE);
ret = os_file_set_size(path, file, size * UNIV_PAGE_SIZE, 0);
if (!ret) {
- ut_free(page);
+ ut_free(buf2);
os_file_close(file);
os_file_delete(path);
@@ -2211,7 +2217,7 @@ fil_create_new_single_table_tablespace(
/* printf("Creating tablespace %s id %lu\n", path, *space_id); */
if (*space_id == ULINT_UNDEFINED) {
- ut_free(page);
+ ut_free(buf2);
error_exit:
os_file_close(file);
os_file_delete(path);
@@ -2237,7 +2243,7 @@ fil_create_new_single_table_tablespace(
ret = os_file_write(path, file, page, 0, 0, UNIV_PAGE_SIZE);
- ut_free(page);
+ ut_free(buf2);
if (!ret) {
fprintf(stderr,
@@ -2308,6 +2314,7 @@ fil_reset_too_high_lsns(
os_file_t file;
char* filepath;
byte* page;
+ byte* buf2;
dulint flush_lsn;
ulint space_id;
ib_longlong file_size;
@@ -2320,14 +2327,16 @@ fil_reset_too_high_lsns(
file = os_file_create_simple_no_error_handling(filepath, OS_FILE_OPEN,
OS_FILE_READ_WRITE, &success);
if (!success) {
- ut_free(filepath);
+ mem_free(filepath);
return(FALSE);
}
/* Read the first page of the tablespace */
- page = ut_malloc(UNIV_PAGE_SIZE);
+ buf2 = ut_malloc(2 * UNIV_PAGE_SIZE);
+ /* Align the memory for file i/o if we might have O_DIRECT set */
+ page = ut_align(buf2, UNIV_PAGE_SIZE);
success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
if (!success) {
@@ -2414,8 +2423,8 @@ fil_reset_too_high_lsns(
success = os_file_flush(file);
func_exit:
os_file_close(file);
- ut_free(page);
- ut_free(filepath);
+ ut_free(buf2);
+ mem_free(filepath);
return(success);
}
@@ -2440,6 +2449,7 @@ fil_open_single_table_tablespace(
os_file_t file;
char* filepath;
ibool success;
+ byte* buf2;
byte* page;
ulint space_id;
ibool ret = TRUE;
@@ -2463,14 +2473,16 @@ fil_open_single_table_tablespace(
"InnoDB: You can look from section 15.1 of http://www.innodb.com/ibman.html\n"
"InnoDB: how to resolve the issue.\n");
- ut_free(filepath);
+ mem_free(filepath);
return(FALSE);
}
/* Read the first page of the tablespace */
- page = ut_malloc(UNIV_PAGE_SIZE);
+ buf2 = ut_malloc(2 * UNIV_PAGE_SIZE);
+ /* Align the memory for file i/o if we might have O_DIRECT set */
+ page = ut_align(buf2, UNIV_PAGE_SIZE);
success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
@@ -2507,8 +2519,8 @@ fil_open_single_table_tablespace(
fil_node_create(filepath, 0, space_id, FALSE);
func_exit:
os_file_close(file);
- ut_free(page);
- ut_free(filepath);
+ ut_free(buf2);
+ mem_free(filepath);
return(ret);
}
@@ -2516,7 +2528,7 @@ func_exit:
#ifdef UNIV_HOTBACKUP
/***********************************************************************
Allocates a file name for an old version of a single-table tablespace.
-The string must be freed by caller with mem_free(). */
+The string must be freed by caller with mem_free()! */
static
char*
fil_make_ibbackup_old_name(
@@ -2526,7 +2538,7 @@ fil_make_ibbackup_old_name(
{
static const char suffix[] = "_ibbackup_old_vers_";
ulint len = strlen(name);
- char* path = ut_malloc(len + (15 + sizeof suffix));
+ char* path = mem_alloc(len + (15 + sizeof suffix));
memcpy(path, name, len);
memcpy(path + len, suffix, (sizeof suffix) - 1);
@@ -2549,6 +2561,7 @@ fil_load_single_table_tablespace(
os_file_t file;
char* filepath;
ibool success;
+ byte* buf2;
byte* page;
ulint space_id;
ulint size_low;
@@ -2557,7 +2570,7 @@ fil_load_single_table_tablespace(
#ifdef UNIV_HOTBACKUP
fil_space_t* space;
#endif
- filepath = ut_malloc(strlen(dbname) + strlen(filename)
+ filepath = mem_alloc(strlen(dbname) + strlen(filename)
+ strlen(fil_path_to_mysql_datadir) + 3);
sprintf(filepath, "%s/%s/%s", fil_path_to_mysql_datadir, dbname,
@@ -2585,7 +2598,7 @@ fil_load_single_table_tablespace(
"InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf\n"
"InnoDB: and force InnoDB to continue crash recovery here.\n", filepath);
- ut_free(filepath);
+ mem_free(filepath);
if (srv_force_recovery > 0) {
fprintf(stderr,
@@ -2620,7 +2633,7 @@ fil_load_single_table_tablespace(
"InnoDB: and force InnoDB to continue crash recovery here.\n", filepath);
os_file_close(file);
- ut_free(filepath);
+ mem_free(filepath);
if (srv_force_recovery > 0) {
fprintf(stderr,
@@ -2648,14 +2661,16 @@ fil_load_single_table_tablespace(
(ulong) size_high,
(ulong) size_low, (ulong) (4 * UNIV_PAGE_SIZE));
os_file_close(file);
- ut_free(filepath);
+ mem_free(filepath);
return;
}
#endif
/* Read the first page of the tablespace if the size big enough */
- page = ut_malloc(UNIV_PAGE_SIZE);
+ buf2 = ut_malloc(2 * UNIV_PAGE_SIZE);
+ /* Align the memory for file i/o if we might have O_DIRECT set */
+ page = ut_align(buf2, UNIV_PAGE_SIZE);
if (size >= FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) {
success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
@@ -2691,9 +2706,9 @@ fil_load_single_table_tablespace(
new_path = fil_make_ibbackup_old_name(filepath);
ut_a(os_file_rename(filepath, new_path));
- ut_free(page);
- ut_free(filepath);
- ut_free(new_path);
+ ut_free(buf2);
+ mem_free(filepath);
+ mem_free(new_path);
return;
}
@@ -2727,9 +2742,9 @@ fil_load_single_table_tablespace(
ut_a(os_file_rename(filepath, new_path));
- ut_free(page);
- ut_free(filepath);
- ut_free(new_path);
+ ut_free(buf2);
+ mem_free(filepath);
+ mem_free(new_path);
return;
}
@@ -2748,8 +2763,8 @@ fil_load_single_table_tablespace(
fil_node_create(filepath, 0, space_id, FALSE);
func_exit:
os_file_close(file);
- ut_free(page);
- ut_free(filepath);
+ ut_free(buf2);
+ mem_free(filepath);
}
/************************************************************************
@@ -2767,7 +2782,7 @@ fil_load_single_table_tablespaces(void)
{
int ret;
char* dbpath = NULL;
- ulint dbpath_len = 0;
+ ulint dbpath_len = 100;
os_file_dir_t dir;
os_file_dir_t dbdir;
os_file_stat_t dbinfo;
@@ -2782,7 +2797,7 @@ fil_load_single_table_tablespaces(void)
return(DB_ERROR);
}
- dbpath = ut_malloc(dbpath_len);
+ dbpath = mem_alloc(dbpath_len);
/* Scan all directories under the datadir. They are the database
directories of MySQL. */
@@ -2806,10 +2821,10 @@ fil_load_single_table_tablespaces(void)
+ strlen (dbinfo.name) + 2;
if (len > dbpath_len) {
dbpath_len = len;
+
if (!dbpath) {
dbpath = mem_alloc(dbpath_len);
- }
- else {
+ } else {
dbpath = mem_realloc(dbpath, dbpath_len,
__FILE__, __LINE__);
}
@@ -2863,9 +2878,7 @@ next_datadir_item:
dir, &dbinfo);
}
- if (dbpath) {
- ut_free(dbpath);
- }
+ mem_free(dbpath);
/* At the end of directory we should get 1 as the return value, -1
if there was an error */
@@ -3280,7 +3293,7 @@ fil_extend_space_to_desired_size(
/************************************************************************
Extends all tablespaces to the size stored in the space header. During the
ibbackup --apply-log phase we extended the spaces on-demand so that log records
-could be appllied, but that may have left spaces still too small compared to
+could be applied, but that may have left spaces still too small compared to
the size stored in the space header. */
void
diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c
index fafed2a484c..57e9690d990 100644
--- a/innobase/os/os0file.c
+++ b/innobase/os/os0file.c
@@ -2341,21 +2341,24 @@ os_file_dirname(
pathname */
const char* path) /* in: pathname */
{
- /* find the offset of the last slash */
+ /* Find the offset of the last slash */
const char* last_slash = strrchr(path, OS_FILE_PATH_SEPARATOR);
if (!last_slash) {
- /* no slash in the path, return "." */
+ /* No slash in the path, return "." */
+
return(mem_strdup("."));
}
- /* ok, there is a slash */
+ /* Ok, there is a slash */
if (last_slash == path) {
/* last slash is the first char of the path */
+
return(mem_strdup("/"));
}
- /* non-trivial directory component */
+ /* Non-trivial directory component */
+
return(mem_strdupl(path, last_slash - path));
}
@@ -2377,23 +2380,26 @@ os_file_create_subdirs_if_needed(
if (strlen(subdir) == 1
&& (*subdir == OS_FILE_PATH_SEPARATOR || *subdir == '.')) {
/* subdir is root or cwd, nothing to do */
- ut_free(subdir);
+ mem_free(subdir);
+
return(TRUE);
}
- /* test if subdir exists */
+ /* Test if subdir exists */
success = os_file_status(subdir, &subdir_exists, &type);
if (success && !subdir_exists) {
/* subdir does not exist, create it */
success = os_file_create_subdirs_if_needed(subdir);
if (!success) {
- ut_free(subdir);
+ mem_free(subdir);
+
return(FALSE);
}
success = os_file_create_directory(subdir, FALSE);
}
- ut_free(subdir);
+ mem_free(subdir);
+
return(success);
}