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);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to