]> git.saurik.com Git - apple/libc.git/blobdiff - stdio/FreeBSD/freopen.c
Libc-1353.11.2.tar.gz
[apple/libc.git] / stdio / FreeBSD / freopen.c
index 3451106f9674a03a4e1bfa44d2cb1d1802701561..b4013040f5a5bcf632f6c5ded2124d035ebc174b 100644 (file)
@@ -70,11 +70,10 @@ freopen(file, mode, fp)
                return (NULL);
        }
 
                return (NULL);
        }
 
+       pthread_once(&__sdidinit, __sinit);
+       
        FLOCKFILE(fp);
 
        FLOCKFILE(fp);
 
-       if (!__sdidinit)
-               __sinit();
-
        /*
         * If the filename is a NULL pointer, the caller is asking us to
         * re-open the same file with a different mode. We allow this only
        /*
         * If the filename is a NULL pointer, the caller is asking us to
         * re-open the same file with a different mode. We allow this only
@@ -195,8 +194,8 @@ finish:
        memset(&fp->_mbstate, 0, sizeof(mbstate_t));
 
        if (f < 0) {                    /* did not get it after all */
        memset(&fp->_mbstate, 0, sizeof(mbstate_t));
 
        if (f < 0) {                    /* did not get it after all */
-               __sfprelease(fp);       /* set it free */
                FUNLOCKFILE(fp);
                FUNLOCKFILE(fp);
+               __sfprelease(fp);       /* set it free */
                errno = sverrno;        /* restore in case _close clobbered */
                return (NULL);
        }
                errno = sverrno;        /* restore in case _close clobbered */
                return (NULL);
        }
@@ -221,8 +220,8 @@ finish:
         * open.
         */
        if (f > SHRT_MAX) {
         * open.
         */
        if (f > SHRT_MAX) {
-               __sfprelease(fp);       /* set it free */
                FUNLOCKFILE(fp);
                FUNLOCKFILE(fp);
+               __sfprelease(fp);       /* set it free */
                errno = EMFILE;
                return (NULL);
        }
                errno = EMFILE;
                return (NULL);
        }