summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-01-10 23:59:28 +0100
committerunknown <jimw@mysql.com>2005-01-10 23:59:28 +0100
commit4bb238a0546b58cab1e8e2cb0efdc854dcc29752 (patch)
tree790da647f0553cc0be50a2b9429b2612428f933b /sql
parentc86ae20457350813de2fb9aa42eb279eedfb8eee (diff)
downloadmariadb-git-4bb238a0546b58cab1e8e2cb0efdc854dcc29752.tar.gz
Fix double-initalization of mutex in archive storage engine. (Bug #7762)
sql/examples/ha_archive.cc: Fix redundant initialization of share->mutex Fix error handling to always clean up correctly Fix a couple of warnings
Diffstat (limited to 'sql')
-rw-r--r--sql/examples/ha_archive.cc31
1 files changed, 17 insertions, 14 deletions
diff --git a/sql/examples/ha_archive.cc b/sql/examples/ha_archive.cc
index 771bf91d118..59024405bec 100644
--- a/sql/examples/ha_archive.cc
+++ b/sql/examples/ha_archive.cc
@@ -341,10 +341,8 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table)
if ((share->archive_write= gzopen(share->data_file_name, "ab")) == NULL)
goto error2;
if (my_hash_insert(&archive_open_tables, (byte*) share))
- goto error2;
- thr_lock_init(&share->lock);
- if (pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST))
goto error3;
+ thr_lock_init(&share->lock);
}
share->use_count++;
pthread_mutex_unlock(&archive_mutex);
@@ -352,14 +350,13 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table)
return share;
error3:
- VOID(pthread_mutex_destroy(&share->mutex));
- thr_lock_delete(&share->lock);
/* We close, but ignore errors since we already have errors */
(void)gzclose(share->archive_write);
error2:
my_close(share->meta_file,MYF(0));
error:
pthread_mutex_unlock(&archive_mutex);
+ VOID(pthread_mutex_destroy(&share->mutex));
my_free((gptr) share, MYF(0));
return NULL;
@@ -493,23 +490,29 @@ int ha_archive::create(const char *name, TABLE *table_arg,
if ((archive= gzdopen(create_file, "ab")) == NULL)
{
error= errno;
- delete_table(name);
- goto error;
+ goto error2;
}
if (write_data_header(archive))
{
- gzclose(archive);
- goto error2;
+ error= errno;
+ goto error3;
}
- if (gzclose(archive))
+ if (gzclose(archive)) {
+ error= errno;
goto error2;
+ }
+
+ my_close(create_file, MYF(0));
DBUG_RETURN(0);
+error3:
+ /* We already have an error, so ignore results of gzclose. */
+ (void)gzclose(archive);
error2:
- error= errno;
- delete_table(name);
+ my_close(create_file, MYF(0));
+ delete_table(name);
error:
/* Return error number, if we got one */
DBUG_RETURN(error ? error : -1);
@@ -736,7 +739,7 @@ int ha_archive::rebuild_meta_file(char *table_name, File meta_file)
if ((rebuild_file= gzopen(data_file_name, "rb")) == NULL)
DBUG_RETURN(errno ? errno : -1);
- if (rc= read_data_header(rebuild_file))
+ if ((rc= read_data_header(rebuild_file)))
goto error;
/*
@@ -800,7 +803,7 @@ int ha_archive::optimize(THD* thd, HA_CHECK_OPT* check_opt)
DBUG_RETURN(-1);
}
- while (read= gzread(reader, block, IO_SIZE))
+ while ((read= gzread(reader, block, IO_SIZE)))
gzwrite(writer, block, read);
gzclose(reader);