diff options
author | Keith Bostic <keith@wiredtiger.com> | 2012-12-12 13:54:27 +0000 |
---|---|---|
committer | Keith Bostic <keith@wiredtiger.com> | 2012-12-12 13:54:27 +0000 |
commit | 7d30988c5c3388ea1dad908929b1d61736b8c93e (patch) | |
tree | aca87ac969f53458f563c4693e7526389cd49f76 | |
parent | 117bd5949ec433295c041c4f42786cca015f8413 (diff) | |
download | mongo-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.c | 2 | ||||
-rw-r--r-- | src/block/block_open.c | 2 | ||||
-rw-r--r-- | src/btree/bt_debug.c | 2 | ||||
-rw-r--r-- | src/btree/bt_handle.c | 2 | ||||
-rw-r--r-- | src/conn/conn_api.c | 4 | ||||
-rw-r--r-- | src/conn/conn_btree.c | 2 | ||||
-rw-r--r-- | src/conn/conn_cache_pool.c | 2 | ||||
-rw-r--r-- | src/conn/conn_open.c | 2 | ||||
-rw-r--r-- | src/cursor/cur_backup.c | 4 | ||||
-rw-r--r-- | src/cursor/cur_file.c | 2 | ||||
-rw-r--r-- | src/cursor/cur_index.c | 2 | ||||
-rw-r--r-- | src/cursor/cur_std.c | 2 | ||||
-rw-r--r-- | src/cursor/cur_table.c | 2 | ||||
-rw-r--r-- | src/lsm/lsm_cursor.c | 2 | ||||
-rw-r--r-- | src/lsm/lsm_tree.c | 8 | ||||
-rw-r--r-- | src/meta/meta_ckpt.c | 1 | ||||
-rw-r--r-- | src/meta/meta_table.c | 30 | ||||
-rw-r--r-- | src/meta/meta_turtle.c | 10 | ||||
-rw-r--r-- | src/schema/schema_create.c | 3 | ||||
-rw-r--r-- | src/schema/schema_open.c | 1 | ||||
-rw-r--r-- | src/schema/schema_rename.c | 1 |
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); } |