[Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication cl5_api.c, 1.23, 1.24

Nathan Kinder nkinder at fedoraproject.org
Fri Nov 14 02:06:37 UTC 2008


Author: nkinder

Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv25071/ldap/servers/plugins/replication

Modified Files:
	cl5_api.c 
Log Message:
Resolves: 450046
Summary: Clean-up leftover changelog semaphore at startup.



Index: cl5_api.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/cl5_api.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- cl5_api.c	15 Oct 2008 06:29:58 -0000	1.23
+++ cl5_api.c	14 Nov 2008 02:06:34 -0000	1.24
@@ -6415,17 +6415,35 @@
 		(*dbFile)->semaName = slapi_ch_smprintf("%s/%s.sema", semadir, replName);
 		slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
 			"_cl5NewDBFile: semaphore %s\n", (*dbFile)->semaName);
-		(*dbFile)->sema = PR_OpenSemaphore((*dbFile)->semaName, PR_SEM_CREATE, 0666, s_cl5Desc.dbConfig.maxConcurrentWrites );
+		(*dbFile)->sema = PR_OpenSemaphore((*dbFile)->semaName,
+                        PR_SEM_CREATE | PR_SEM_EXCL, 0666,
+                        s_cl5Desc.dbConfig.maxConcurrentWrites );
 		slapi_log_error (SLAPI_LOG_REPL, repl_plugin_name_cl, "_cl5NewDBFile: maxConcurrentWrites=%d\n", s_cl5Desc.dbConfig.maxConcurrentWrites );
 	}
 
 	if ((*dbFile)->sema == NULL )
 	{
-		slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
-			"_cl5NewDBFile: failed to create semaphore %s; NSPR error - %d\n",
-			(*dbFile)->semaName ? (*dbFile)->semaName : "(nil)", PR_GetError ());
-		rc = CL5_SYSTEM_ERROR;
-		goto done;
+		/* If the semaphore was left around due
+		 * to an unclean exit last time, remove
+		 * and re-create it.
+		 */ 
+		if (PR_GetError() == PR_FILE_EXISTS_ERROR) {
+			PR_DeleteSemaphore((*dbFile)->semaName);
+			(*dbFile)->sema = PR_OpenSemaphore((*dbFile)->semaName,
+					PR_SEM_CREATE | PR_SEM_EXCL, 0666,
+					s_cl5Desc.dbConfig.maxConcurrentWrites );
+		}
+
+		/* If we still failed to create the semaphore,
+		 * we should just error out. */
+		if ((*dbFile)->sema == NULL )
+		{
+			slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
+				"_cl5NewDBFile: failed to create semaphore %s; NSPR error - %d\n",
+				(*dbFile)->semaName ? (*dbFile)->semaName : "(nil)", PR_GetError());
+			rc = CL5_SYSTEM_ERROR;
+			goto done;
+		}
 	}
 
 	/* compute number of entries in the file */




More information about the Fedora-directory-commits mailing list