summaryrefslogtreecommitdiffstats
path: root/libelf/elf32_getphdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'libelf/elf32_getphdr.c')
-rw-r--r--libelf/elf32_getphdr.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/libelf/elf32_getphdr.c b/libelf/elf32_getphdr.c
index 69087245..972132e4 100644
--- a/libelf/elf32_getphdr.c
+++ b/libelf/elf32_getphdr.c
@@ -67,7 +67,8 @@
ElfW2(LIBELFBITS,Phdr) *
-elfw2(LIBELFBITS,getphdr) (elf)
+__elfw2(LIBELFBITS,getphdr_internal) (elf, locked)
+ lockstat_t locked;
Elf *elf;
{
ElfW2(LIBELFBITS,Phdr) *result;
@@ -88,7 +89,7 @@ elfw2(LIBELFBITS,getphdr) (elf)
if (likely (result != NULL))
return result;
- rwlock_wrlock (elf->lock);
+ rwlock_to_wrlock (locked, &elf->lock);
if (elf->class == 0)
elf->class = ELFW(ELFCLASS,LIBELFBITS);
@@ -234,8 +235,16 @@ elfw2(LIBELFBITS,getphdr) (elf)
}
out:
- rwlock_unlock (elf->lock);
-
+ rwlock_from_wrlock (locked, &elf->lock);
return result;
}
-INTDEF(elfw2(LIBELFBITS,getphdr))
+
+ElfW2(LIBELFBITS,Phdr) *
+elfw2(LIBELFBITS,getphdr) (elf)
+ Elf *elf;
+{
+ if (elf == NULL)
+ return NULL;
+
+ return __elfw2(LIBELFBITS,getphdr_internal) (elf, LS_UNLOCKED);
+}