summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/internal/stdio_impl.h1
-rw-r--r--src/ldso/dynlink.c5
-rw-r--r--src/stdio/__stdio_exit.c2
-rw-r--r--src/stdio/fclose.c3
4 files changed, 5 insertions, 6 deletions
diff --git a/src/internal/stdio_impl.h b/src/internal/stdio_impl.h
index 80646f8c..e9045f27 100644
--- a/src/internal/stdio_impl.h
+++ b/src/internal/stdio_impl.h
@@ -24,6 +24,7 @@
#define UNGET 8
+#define FFINALLOCK(f) ((f)->lock>=0 ? __lockfile((f)) : 0)
#define FLOCK(f) int __need_unlock = ((f)->lock>=0 ? __lockfile((f)) : 0)
#define FUNLOCK(f) if (__need_unlock) __unlockfile((f)); else
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index 13bf16a5..25242051 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -435,7 +435,7 @@ static struct dso *load_library(const char *name)
char buf[2*NAME_MAX+2];
const char *pathname;
unsigned char *base, *map;
- size_t dyno, map_len;
+ size_t map_len;
struct dso *p, temp_dso = {0};
int fd;
struct stat st;
@@ -866,7 +866,7 @@ void *__dynlink(int argc, char **argv)
} else {
int fd;
char *ldname = argv[0];
- size_t dyno, l = strlen(ldname);
+ size_t l = strlen(ldname);
if (l >= 3 && !strcmp(ldname+l-3, "ldd")) ldd_mode = 1;
*argv++ = (void *)-1;
if (argv[0] && !strcmp(argv[0], "--")) *argv++ = (void *)-1;
@@ -962,7 +962,6 @@ void *__dynlink(int argc, char **argv)
update_tls_size();
if (tls_cnt) {
- struct dso *p;
void *mem = mmap(0, libc.tls_size, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
if (mem==MAP_FAILED ||
diff --git a/src/stdio/__stdio_exit.c b/src/stdio/__stdio_exit.c
index 3f87e7ed..0fb33234 100644
--- a/src/stdio/__stdio_exit.c
+++ b/src/stdio/__stdio_exit.c
@@ -8,7 +8,7 @@ weak_alias(dummy_file, __stderr_used);
static void close_file(FILE *f)
{
if (!f) return;
- FLOCK(f);
+ FFINALLOCK(f);
if (f->wpos > f->wbase) f->write(f, 0, 0);
if (f->rpos < f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR);
}
diff --git a/src/stdio/fclose.c b/src/stdio/fclose.c
index 92bf7ff8..38e8a1e3 100644
--- a/src/stdio/fclose.c
+++ b/src/stdio/fclose.c
@@ -5,8 +5,7 @@ int fclose(FILE *f)
int r;
int perm;
- /* This lock is not paired with any unlock. */
- FLOCK(f);
+ FFINALLOCK(f);
if (!(perm = f->flags & F_PERM)) {
OFLLOCK();