summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Bostic <keith@wiredtiger.com>2012-12-12 13:54:27 +0000
committerKeith Bostic <keith@wiredtiger.com>2012-12-12 13:54:27 +0000
commit7d30988c5c3388ea1dad908929b1d61736b8c93e (patch)
treeaca87ac969f53458f563c4693e7526389cd49f76
parent117bd5949ec433295c041c4f42786cca015f8413 (diff)
downloadmongo-7d30988c5c3388ea1dad908929b1d61736b8c93e.tar.gz
Now some errors can override other errors, we shouldn't ignore errors
from cleanup functions. Review all err: labels, make sure we correctly accumulate errors. While I'm there: -- __backup_start, __wt_metadata_load_backup and __wt_meta_turtle_read ignored the result of fclose(), and/or set the return value of the function on error to -1, not errno. -- __wt_lsm_tree_setup_chunk was using WT_ERR, but could use WT_RET instead, it didn't need an err: label. -- make all the __wt_metadata_XXX functions follow the same pattern (quitting, and jumping to err:, on the first error). -- __wt_meta_turtle_update didn't discard the temporary file if the rename failed.
-rw-r--r--src/block/block_ckpt.c2
-rw-r--r--src/block/block_open.c2
-rw-r--r--src/btree/bt_debug.c2
-rw-r--r--src/btree/bt_handle.c2
-rw-r--r--src/conn/conn_api.c4
-rw-r--r--src/conn/conn_btree.c2
-rw-r--r--src/conn/conn_cache_pool.c2
-rw-r--r--src/conn/conn_open.c2
-rw-r--r--src/cursor/cur_backup.c4
-rw-r--r--src/cursor/cur_file.c2
-rw-r--r--src/cursor/cur_index.c2
-rw-r--r--src/cursor/cur_std.c2
-rw-r--r--src/cursor/cur_table.c2
-rw-r--r--src/lsm/lsm_cursor.c2
-rw-r--r--src/lsm/lsm_tree.c8
-rw-r--r--src/meta/meta_ckpt.c1
-rw-r--r--src/meta/meta_table.c30
-rw-r--r--src/meta/meta_turtle.c10
-rw-r--r--src/schema/schema_create.c3
-rw-r--r--src/schema/schema_open.c1
-rw-r--r--src/schema/schema_rename.c1
21 files changed, 39 insertions, 47 deletions
diff --git a/src/block/block_ckpt.c b/src/block/block_ckpt.c
index 6bf04f08b13..6e7f2b0b4a6 100644
--- a/src/block/block_ckpt.c
+++ b/src/block/block_ckpt.c
@@ -133,7 +133,7 @@ __wt_block_checkpoint_load(WT_SESSION_IMPL *session, WT_BLOCK *block,
}
if (0) {
-err: (void)__wt_block_checkpoint_unload(session, block);
+err: WT_TRET(__wt_block_checkpoint_unload(session, block));
}
__wt_scr_free(&tmp);
diff --git a/src/block/block_open.c b/src/block/block_open.c
index 345d44f506a..626e5644958 100644
--- a/src/block/block_open.c
+++ b/src/block/block_open.c
@@ -104,7 +104,7 @@ __wt_block_open(WT_SESSION_IMPL *session, const char *filename,
*(void **)blockp = block;
return (0);
-err: (void)__wt_block_close(session, block);
+err: WT_TRET(__wt_block_close(session, block));
return (ret);
}
diff --git a/src/btree/bt_debug.c b/src/btree/bt_debug.c
index a2d32de3243..90a10e1e37c 100644
--- a/src/btree/bt_debug.c
+++ b/src/btree/bt_debug.c
@@ -195,8 +195,8 @@ __wt_debug_addr(WT_SESSION_IMPL *session,
WT_ERR(__wt_block_read(
session, session->btree->block, buf, addr, addr_size));
ret = __wt_debug_disk(session, buf->mem, ofile);
-err: __wt_scr_free(&buf);
+err: __wt_scr_free(&buf);
return (ret);
}
diff --git a/src/btree/bt_handle.c b/src/btree/bt_handle.c
index 28afc57e2de..9a29f4966c0 100644
--- a/src/btree/bt_handle.c
+++ b/src/btree/bt_handle.c
@@ -116,7 +116,7 @@ __wt_btree_open(WT_SESSION_IMPL *session, const char *cfg[])
}
if (0) {
-err: (void)__wt_btree_close(session);
+err: WT_TRET(__wt_btree_close(session));
}
__wt_meta_checkpoint_free(session, &ckpt);
diff --git a/src/conn/conn_api.c b/src/conn/conn_api.c
index 1f84c5897a3..c5ef15ea130 100644
--- a/src/conn/conn_api.c
+++ b/src/conn/conn_api.c
@@ -76,7 +76,7 @@ __conn_load_extension(
if (0) {
err: if (dlh != NULL)
- (void)__wt_dlclose(session, dlh);
+ WT_TRET(__wt_dlclose(session, dlh));
}
__wt_free(session, entry_name);
@@ -707,7 +707,7 @@ __conn_single(WT_SESSION_IMPL *session, const char **cfg)
return (0);
err: if (conn->lock_fh != NULL) {
- (void)__wt_close(session, conn->lock_fh);
+ WT_TRET(__wt_close(session, conn->lock_fh));
conn->lock_fh = NULL;
}
return (ret);
diff --git a/src/conn/conn_btree.c b/src/conn/conn_btree.c
index 81280e814d2..914eea3afac 100644
--- a/src/conn/conn_btree.c
+++ b/src/conn/conn_btree.c
@@ -250,7 +250,7 @@ __conn_btree_open(WT_SESSION_IMPL *session,
if (0) {
err: F_CLR(btree, WT_BTREE_SPECIAL_FLAGS);
- (void)__wt_conn_btree_close(session, 1);
+ WT_TRET(__wt_conn_btree_close(session, 1));
}
return (ret);
diff --git a/src/conn/conn_cache_pool.c b/src/conn/conn_cache_pool.c
index 4de569d4d2b..21842d521d6 100644
--- a/src/conn/conn_cache_pool.c
+++ b/src/conn/conn_cache_pool.c
@@ -105,7 +105,7 @@ err: __wt_spin_unlock(session, &__wt_process.spinlock);
__wt_free(session, pool_name);
if (ret != 0 && created) {
__wt_free(session, cp->name);
- (void)__wt_cond_destroy(session, cp->cache_pool_cond);
+ WT_TRET(__wt_cond_destroy(session, cp->cache_pool_cond));
__wt_free(session, cp);
}
return (ret);
diff --git a/src/conn/conn_open.c b/src/conn/conn_open.c
index 2f8f9f16828..0592783e7cd 100644
--- a/src/conn/conn_open.c
+++ b/src/conn/conn_open.c
@@ -54,7 +54,7 @@ __wt_connection_open(WT_CONNECTION_IMPL *conn, const char *cfg[])
return (0);
-err: (void)__wt_connection_close(conn);
+err: WT_TRET(__wt_connection_close(conn));
return (ret);
}
diff --git a/src/cursor/cur_backup.c b/src/cursor/cur_backup.c
index 4bb3065c643..44e36776665 100644
--- a/src/cursor/cur_backup.c
+++ b/src/cursor/cur_backup.c
@@ -223,10 +223,10 @@ __backup_start(
conn->ckpt_backup = 1;
err: if (bfp != NULL)
- (void)fclose(bfp);
+ WT_TRET(fclose(bfp) == 0 ? 0 : __wt_errno());
if (ret != 0)
- (void)__backup_file_remove(session);
+ WT_TRET(__backup_file_remove(session));
return (ret);
}
diff --git a/src/cursor/cur_file.c b/src/cursor/cur_file.c
index 0e311438e2e..0e2e9225e51 100644
--- a/src/cursor/cur_file.c
+++ b/src/cursor/cur_file.c
@@ -413,6 +413,6 @@ __wt_curfile_open(WT_SESSION_IMPL *session, const char *uri,
return (0);
err: /* If the cursor could not be opened, release the handle. */
- (void)__wt_session_release_btree(session);
+ WT_TRET(__wt_session_release_btree(session));
return (ret);
}
diff --git a/src/cursor/cur_index.c b/src/cursor/cur_index.c
index c440861fa67..87dc7b51fe4 100644
--- a/src/cursor/cur_index.c
+++ b/src/cursor/cur_index.c
@@ -448,7 +448,7 @@ __wt_curindex_open(WT_SESSION_IMPL *session,
WT_ERR(__wt_cursor_init(cursor, cursor->uri, NULL, cfg, cursorp));
if (0) {
-err: (void)__curindex_close(cursor);
+err: WT_TRET(__curindex_close(cursor));
}
return (ret);
diff --git a/src/cursor/cur_std.c b/src/cursor/cur_std.c
index 3a724524ddb..8011e7cc1ba 100644
--- a/src/cursor/cur_std.c
+++ b/src/cursor/cur_std.c
@@ -421,7 +421,7 @@ __wt_cursor_dup(WT_SESSION_IMPL *session,
if (0) {
err: if (cursor != NULL)
- (void)cursor->close(cursor);
+ WT_TRET(cursor->close(cursor));
cursor = NULL;
}
diff --git a/src/cursor/cur_table.c b/src/cursor/cur_table.c
index 25c9b45a8b2..6f6f84625e3 100644
--- a/src/cursor/cur_table.c
+++ b/src/cursor/cur_table.c
@@ -806,7 +806,7 @@ __wt_curtable_open(WT_SESSION_IMPL *session,
WT_ERR(__curtable_open_colgroups(ctable, cfg));
if (0) {
-err: (void)__curtable_close(cursor);
+err: WT_TRET(__curtable_close(cursor));
*cursorp = NULL;
}
diff --git a/src/lsm/lsm_cursor.c b/src/lsm/lsm_cursor.c
index 8702dab0e22..8ec4356794b 100644
--- a/src/lsm/lsm_cursor.c
+++ b/src/lsm/lsm_cursor.c
@@ -1034,7 +1034,7 @@ __wt_clsm_open(WT_SESSION_IMPL *session,
err: if (lsm_tree != NULL)
__wt_lsm_tree_release(session, lsm_tree);
if (cursor != NULL)
- (void)__clsm_close(cursor);
+ WT_TRET(__clsm_close(cursor));
}
return (ret);
diff --git a/src/lsm/lsm_tree.c b/src/lsm/lsm_tree.c
index 972031204fd..8a31ced75eb 100644
--- a/src/lsm/lsm_tree.c
+++ b/src/lsm/lsm_tree.c
@@ -189,11 +189,11 @@ int
__wt_lsm_tree_setup_chunk(
WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree, WT_LSM_CHUNK *chunk)
{
- WT_DECL_RET;
WT_ITEM buf;
const char *cfg[] = API_CONF_DEFAULTS(session, drop, "force");
WT_CLEAR(buf);
+
WT_RET(__wt_lsm_tree_chunk_name(session, lsm_tree, chunk->id, &buf));
chunk->uri = __wt_buf_steal(session, &buf, NULL);
@@ -207,10 +207,8 @@ __wt_lsm_tree_setup_chunk(
* been the result of an interrupted merge, anyway.
*/
if (chunk->id > 1)
- WT_ERR(__wt_schema_drop(session, chunk->uri, cfg));
- WT_ERR(__wt_schema_create(session, chunk->uri, lsm_tree->file_config));
-
-err: return (ret);
+ WT_RET(__wt_schema_drop(session, chunk->uri, cfg));
+ return (__wt_schema_create(session, chunk->uri, lsm_tree->file_config));
}
/*
diff --git a/src/meta/meta_ckpt.c b/src/meta/meta_ckpt.c
index 844d625c985..74231c989fe 100644
--- a/src/meta/meta_ckpt.c
+++ b/src/meta/meta_ckpt.c
@@ -449,7 +449,6 @@ __wt_meta_ckptlist_set(
WT_ERR(__ckpt_set(session, fname, buf->mem));
err: __wt_scr_free(&buf);
-
return (ret);
}
diff --git a/src/meta/meta_table.c b/src/meta/meta_table.c
index 49a33aa28b5..dace6900ce8 100644
--- a/src/meta/meta_table.c
+++ b/src/meta/meta_table.c
@@ -88,7 +88,7 @@ __wt_metadata_load_backup(WT_SESSION_IMPL *session)
WT_ERR(__wt_remove(session, WT_METADATA_BACKUP));
err: if (fp != NULL)
- WT_TRET(fclose(fp));
+ WT_TRET(fclose(fp) == 0 ? 0 : __wt_errno());
if (path != NULL)
__wt_free(session, path);
__wt_scr_free(&key);
@@ -135,15 +135,15 @@ __wt_metadata_insert(
WT_RET_MSG(session, EINVAL,
"%s: insert not supported on the turtle file", key);
- WT_ERR(__wt_metadata_cursor(session, NULL, &cursor));
+ WT_RET(__wt_metadata_cursor(session, NULL, &cursor));
cursor->set_key(cursor, key);
cursor->set_value(cursor, value);
- WT_TRET(cursor->insert(cursor));
- if (ret == 0 && WT_META_TRACKING(session))
- ret = __wt_meta_track_insert(session, key);
- WT_TRET(cursor->close(cursor));
+ WT_ERR(cursor->insert(cursor));
+ if (WT_META_TRACKING(session))
+ WT_ERR(__wt_meta_track_insert(session, key));
-err: return (ret);
+err: WT_TRET(cursor->close(cursor));
+ return (ret);
}
/*
@@ -166,9 +166,9 @@ __wt_metadata_update(
WT_RET(__wt_metadata_cursor(session, "overwrite", &cursor));
cursor->set_key(cursor, key);
cursor->set_value(cursor, value);
- WT_TRET(cursor->insert(cursor));
- WT_TRET(cursor->close(cursor));
+ WT_ERR(cursor->insert(cursor));
+err: WT_TRET(cursor->close(cursor));
return (ret);
}
@@ -188,14 +188,12 @@ __wt_metadata_remove(WT_SESSION_IMPL *session, const char *key)
WT_RET(__wt_metadata_cursor(session, NULL, &cursor));
cursor->set_key(cursor, key);
- WT_TRET(cursor->search(cursor));
- if (ret == 0) {
- if (WT_META_TRACKING(session))
- WT_TRET(__wt_meta_track_update(session, key));
- WT_TRET(cursor->remove(cursor));
- }
- WT_TRET(cursor->close(cursor));
+ WT_ERR(cursor->search(cursor));
+ if (WT_META_TRACKING(session))
+ WT_ERR(__wt_meta_track_update(session, key));
+ WT_ERR(cursor->remove(cursor));
+err: WT_TRET(cursor->close(cursor));
return (ret);
}
diff --git a/src/meta/meta_turtle.c b/src/meta/meta_turtle.c
index e2d13cb883b..60ef19f24d6 100644
--- a/src/meta/meta_turtle.c
+++ b/src/meta/meta_turtle.c
@@ -47,7 +47,6 @@ __wt_meta_turtle_init(WT_SESSION_IMPL *session, int *existp)
err: __wt_free(session, metaconf);
__wt_scr_free(&buf);
-
return (ret);
}
@@ -93,7 +92,7 @@ __wt_meta_turtle_read(
WT_ERR(__wt_strdup(session, buf->data, valuep));
err: if (fp != NULL)
- WT_TRET(fclose(fp));
+ WT_TRET(fclose(fp) == 0 ? 0 : __wt_errno());
if (path != NULL)
__wt_free(session, path);
__wt_scr_free(&buf);
@@ -136,14 +135,15 @@ __wt_meta_turtle_update(
fp = NULL;
WT_ERR_TEST(ret == EOF, __wt_errno());
- ret = __wt_rename(session, WT_METADATA_TURTLE_SET, WT_METADATA_TURTLE);
+ WT_ERR(
+ __wt_rename(session, WT_METADATA_TURTLE_SET, WT_METADATA_TURTLE));
if (0) {
-err: (void)__wt_remove(session, WT_METADATA_TURTLE_SET);
+err: WT_TRET(__wt_remove(session, WT_METADATA_TURTLE_SET));
}
if (fp != NULL)
- (void)fclose(fp);
+ WT_TRET(fclose(fp) == 0 ? 0 : __wt_errno());
__wt_free(session, path);
__wt_scr_free(&buf);
diff --git a/src/schema/schema_create.c b/src/schema/schema_create.c
index 0d8fbaf07de..222bab9de17 100644
--- a/src/schema/schema_create.c
+++ b/src/schema/schema_create.c
@@ -73,7 +73,6 @@ __create_file(WT_SESSION_IMPL *session,
err: __wt_scr_free(&val);
__wt_free(session, treeconf);
-
return (ret);
}
@@ -418,7 +417,7 @@ __create_table(WT_SESSION_IMPL *session,
if (0) {
err: if (table != NULL)
- (void)__wt_schema_remove_table(session, table);
+ WT_TRET(__wt_schema_remove_table(session, table));
}
__wt_free(session, cgname);
__wt_free(session, tableconf);
diff --git a/src/schema/schema_open.c b/src/schema/schema_open.c
index 6df7e4cb67f..7d078bf00f6 100644
--- a/src/schema/schema_open.c
+++ b/src/schema/schema_open.c
@@ -199,7 +199,6 @@ __open_index(WT_SESSION_IMPL *session, WT_TABLE *table, WT_INDEX *idx)
err: __wt_scr_free(&buf);
__wt_scr_free(&plan);
-
return (ret);
}
diff --git a/src/schema/schema_rename.c b/src/schema/schema_rename.c
index 863edc14f17..b2364ee542f 100644
--- a/src/schema/schema_rename.c
+++ b/src/schema/schema_rename.c
@@ -66,7 +66,6 @@ __rename_file(
err: __wt_free(session, newvalue);
__wt_free(session, oldvalue);
-
return (ret);
}