summaryrefslogtreecommitdiff
path: root/src/conn
diff options
context:
space:
mode:
authorKeith Bostic <keith.bostic@mongodb.com>2017-01-23 11:34:06 -0500
committerDon Anderson <dda@mongodb.com>2017-01-23 11:34:06 -0500
commitb2ab33d476c657120c56ed31aa05f54557f010e0 (patch)
tree5cc161a683f263c5700f628b6972654dd87e1d29 /src/conn
parentf214daa45a860021f107c498ddfd1328b6b3f517 (diff)
downloadmongo-b2ab33d476c657120c56ed31aa05f54557f010e0.tar.gz
WT-3120 Fix ordering problem in connection_close for filesystem loaded in an extension (#3261)
This commit represents fixes for Coverity errors, LeakSanitizer errors, and additional cleanup: * pread/pwrite return value is -1 on error, but the error is in errno. * Convert size_t and off_t to uintmax_t/PRIuMAX, not uint64_t/PRIu64. * Coverity ID 1369085 (#1 of 1): Extra sizeof expression (SIZEOF_MISMATCH) suspicious_pointer_arithmetic: Adding allocated * 8UL /* sizeof (char *) */ to pointer entries of type char ** is suspicious because adding an integral value to this pointer automatically scales that value by the size, 8 bytes, of the pointed-to type, char *. Most likely, the multiplication by sizeof (char *) in this expression is extraneous and should be eliminated. * CID 1369084 (#1 of 1): Resource leak (RESOURCE_LEAK) 9. overwrite_var: Overwriting handle ret in ret = 12 leaks the handle. * CID 1369083 (#1 of 1): Logically dead code (DEADCODE) dead_error_line: Execution cannot reach this statement: while (count > 0U) null: At condition entries != NULL, the value of entries must be NULL. dead_error_condition: The condition entries != NULL cannot be true. * Custom filesystems have to configure early-load, otherwise we'll have already configured a default filesystem by the time the extension is loaded. * Add early-load configuration to the wt3120_filesys test. * Add code to WiredTiger that fails if a custom filesystem is configured after we've already configured a default filesystem.
Diffstat (limited to 'src/conn')
-rw-r--r--src/conn/conn_api.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/conn/conn_api.c b/src/conn/conn_api.c
index f691a76b1f2..d76e08067b5 100644
--- a/src/conn/conn_api.c
+++ b/src/conn/conn_api.c
@@ -1987,6 +1987,16 @@ __conn_set_file_system(
CONNECTION_API_CALL(conn, session, set_file_system, config, cfg);
WT_UNUSED(cfg);
+ /*
+ * You can only configure a file system once, and attempting to do it
+ * again probably means the extension argument didn't have early-load
+ * set and we've already configured the default file system.
+ */
+ if (conn->file_system != NULL)
+ WT_ERR_MSG(session, EPERM,
+ "filesystem already configured; custom filesystems should "
+ "enable \"early_load\" configuration");
+
conn->file_system = file_system;
err: API_END_RET(session, ret);