svn commit: r246894 - head/lib/libc/gen

David Xu davidxu at FreeBSD.org
Sun Feb 17 02:52:43 UTC 2013


Author: davidxu
Date: Sun Feb 17 02:52:42 2013
New Revision: 246894
URL: http://svnweb.freebsd.org/changeset/base/246894

Log:
  Make more code be protected by internal mutex, and now it is fork-safe, in
  error case, the file exclusive lock is now released as soon as possible,
  in previous code, child process can still hold the exclusive lock.

Modified:
  head/lib/libc/gen/sem_new.c

Modified: head/lib/libc/gen/sem_new.c
==============================================================================
--- head/lib/libc/gen/sem_new.c	Sun Feb 17 02:15:19 2013	(r246893)
+++ head/lib/libc/gen/sem_new.c	Sun Feb 17 02:52:42 2013	(r246894)
@@ -229,18 +229,18 @@ _sem_open(const char *name, int flags, .
 	ni->open_count = 1;
 	ni->sem = sem;
 	LIST_INSERT_HEAD(&sem_list, ni, next);
-	_pthread_mutex_unlock(&sem_llock);
 	_close(fd);
+	_pthread_mutex_unlock(&sem_llock);
 	return (sem);
 
 error:
 	errsave = errno;
-	_pthread_mutex_unlock(&sem_llock);
 	if (fd != -1)
 		_close(fd);
 	if (sem != NULL)
 		munmap(sem, sizeof(sem_t));
 	free(ni);
+	_pthread_mutex_unlock(&sem_llock);
 	errno = errsave;
 	return (SEM_FAILED);
 }


More information about the svn-src-head mailing list