about summary refs log tree commit diff
path: root/db2/mp/mp_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'db2/mp/mp_open.c')
-rw-r--r--db2/mp/mp_open.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/db2/mp/mp_open.c b/db2/mp/mp_open.c
index ca81f8d6d6..fc985bc521 100644
--- a/db2/mp/mp_open.c
+++ b/db2/mp/mp_open.c
@@ -1,23 +1,20 @@
 /*-
  * See the file LICENSE for redistribution information.
  *
- * Copyright (c) 1996, 1997
+ * Copyright (c) 1996, 1997, 1998
  *	Sleepycat Software.  All rights reserved.
  */
 #include "config.h"
 
 #ifndef lint
-static const char sccsid[] = "@(#)mp_open.c	10.16 (Sleepycat) 11/28/97";
+static const char sccsid[] = "@(#)mp_open.c	10.23 (Sleepycat) 5/3/98";
 #endif /* not lint */
 
 #ifndef NO_SYSTEM_INCLUDES
 #include <sys/types.h>
 
 #include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
 #endif
 
 #include "db_int.h"
@@ -33,13 +30,14 @@ static const char sccsid[] = "@(#)mp_open.c	10.16 (Sleepycat) 11/28/97";
 int
 memp_open(path, flags, mode, dbenv, retp)
 	const char *path;
-	int flags, mode;
+	u_int32_t flags;
+	int mode;
 	DB_ENV *dbenv;
 	DB_MPOOL **retp;
 {
 	DB_MPOOL *dbmp;
 	size_t cachesize;
-	int ret;
+	int is_private, ret;
 
 	/* Validate arguments. */
 #ifdef HAVE_SPINLOCKS
@@ -62,15 +60,16 @@ memp_open(path, flags, mode, dbenv, retp)
 	dbmp->dbenv = dbenv;
 
 	/* Decide if it's possible for anyone else to access the pool. */
-	if ((dbenv == NULL && path == NULL) || LF_ISSET(DB_MPOOL_PRIVATE))
-		F_SET(dbmp, MP_ISPRIVATE);
+	is_private =
+	    (dbenv == NULL && path == NULL) || LF_ISSET(DB_MPOOL_PRIVATE);
 
 	/*
 	 * Map in the region.  We do locking regardless, as portions of it are
 	 * implemented in common code (if we put the region in a file, that is).
 	 */
 	F_SET(dbmp, MP_LOCKREGION);
-	if ((ret = __memp_ropen(dbmp, path, cachesize, mode, flags)) != 0)
+	if ((ret = __memp_ropen(dbmp,
+	    path, cachesize, mode, is_private, LF_ISSET(DB_CREATE))) != 0)
 		goto err;
 	F_CLR(dbmp, MP_LOCKREGION);
 
@@ -79,7 +78,7 @@ memp_open(path, flags, mode, dbenv, retp)
 	 * If it's threaded, then we have to lock both the handles and the
 	 * region, and we need to allocate a mutex for that purpose.
 	 */
-	if (!F_ISSET(dbmp, MP_ISPRIVATE))
+	if (!is_private)
 		F_SET(dbmp, MP_LOCKREGION);
 	if (LF_ISSET(DB_THREAD)) {
 		F_SET(dbmp, MP_LOCKHANDLE | MP_LOCKREGION);
@@ -135,10 +134,11 @@ memp_close(dbmp)
 	}
 
 	/* Close the region. */
-	if ((t_ret = __memp_rclose(dbmp)) && ret == 0)
+	if ((t_ret = __db_rdetach(&dbmp->reginfo)) != 0 && ret == 0)
 		ret = t_ret;
 
-	/* Discard the structure. */
+	if (dbmp->reginfo.path != NULL)
+		FREES(dbmp->reginfo.path);
 	FREE(dbmp, sizeof(DB_MPOOL));
 
 	return (ret);
@@ -154,8 +154,19 @@ memp_unlink(path, force, dbenv)
 	int force;
 	DB_ENV *dbenv;
 {
-	return (__db_runlink(dbenv,
-	    DB_APP_NONE, path, DB_DEFAULT_MPOOL_FILE, force));
+	REGINFO reginfo;
+	int ret;
+
+	memset(&reginfo, 0, sizeof(reginfo));
+	reginfo.dbenv = dbenv;
+	reginfo.appname = DB_APP_NONE;
+	if (path != NULL && (reginfo.path = __db_strdup(path)) == NULL)
+		return (ENOMEM);
+	reginfo.file = DB_DEFAULT_MPOOL_FILE;
+	ret = __db_runlink(&reginfo, force);
+	if (reginfo.path != NULL)
+		FREES(reginfo.path);
+	return (ret);
 }
 
 /*