don't leave the lock held on dlopen failure..
authorRich Felker <dalias@aerifal.cx>
Mon, 27 Jun 2011 02:09:32 +0000 (22:09 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 27 Jun 2011 02:09:32 +0000 (22:09 -0400)
src/ldso/dynlink.c

index 1cab8d1..62dd9db 100644 (file)
@@ -509,7 +509,7 @@ void *dlopen(const char *file, int mode)
        }
 
        p = load_library(file);
        }
 
        p = load_library(file);
-       if (!p) return 0;
+       if (!p) goto end;
 
        /* First load handling */
        if (!p->deps) {
 
        /* First load handling */
        if (!p->deps) {
@@ -531,8 +531,8 @@ void *dlopen(const char *file, int mode)
                p->global = 1;
        }
 
                p->global = 1;
        }
 
+end:
        pthread_rwlock_unlock(&lock);
        pthread_rwlock_unlock(&lock);
-
        return p;
 }
 
        return p;
 }