summaryrefslogtreecommitdiff
path: root/src/os_posix/os_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os_posix/os_open.c')
-rw-r--r--src/os_posix/os_open.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/os_posix/os_open.c b/src/os_posix/os_open.c
index b085676c53b..219b26c2fa1 100644
--- a/src/os_posix/os_open.c
+++ b/src/os_posix/os_open.c
@@ -73,7 +73,16 @@ __wt_open(WT_SESSION_IMPL *session,
goto setupfh;
}
- f = O_RDWR;
+ /*
+ * If this is a read-only connection, open all files read-only
+ * except the lock file.
+ */
+ if (F_ISSET(conn, WT_CONN_READONLY) &&
+ !WT_STRING_MATCH(name, WT_SINGLETHREAD,
+ strlen(WT_SINGLETHREAD)))
+ f = O_RDONLY;
+ else
+ f = O_RDWR;
#ifdef O_BINARY
/* Windows clones: we always want to treat the file as a binary. */
f |= O_BINARY;
@@ -94,6 +103,9 @@ __wt_open(WT_SESSION_IMPL *session,
#endif
if (ok_create) {
+ WT_ASSERT(session, !F_ISSET(conn, WT_CONN_READONLY) ||
+ WT_STRING_MATCH(name, WT_SINGLETHREAD,
+ strlen(WT_SINGLETHREAD)));
f |= O_CREAT;
if (exclusive)
f |= O_EXCL;