mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +02:00
MINOR: tools: also protect the library name resolution against concurrent accesses
This is an extension of eb41d768f ("MINOR: tools: use only opportunistic symbols resolution"). It also makes sure we're not calling dladddr() in parallel to dladdr_and_size(), as a preventive measure against some potential deadlocks in the inner layers of the libc.
This commit is contained in:
parent
5b5960359f
commit
8d0c633677
10
src/tools.c
10
src/tools.c
@ -5611,11 +5611,12 @@ const void *resolve_sym_name(struct buffer *buf, const char *pfx, const void *ad
|
||||
goto use_array;
|
||||
|
||||
i = dladdr_and_size(addr, &dli, &size);
|
||||
if (!isolated)
|
||||
HA_SPIN_UNLOCK(OTHER_LOCK, &dladdr_lock);
|
||||
|
||||
if (!i)
|
||||
if (!i) {
|
||||
if (!isolated)
|
||||
HA_SPIN_UNLOCK(OTHER_LOCK, &dladdr_lock);
|
||||
goto use_array;
|
||||
}
|
||||
|
||||
/* 1. prefix the library name if it's not the same object as the one
|
||||
* that contains the main function. The name is picked between last '/'
|
||||
@ -5637,6 +5638,9 @@ const void *resolve_sym_name(struct buffer *buf, const char *pfx, const void *ad
|
||||
ha_thread_relax();
|
||||
}
|
||||
|
||||
if (!isolated)
|
||||
HA_SPIN_UNLOCK(OTHER_LOCK, &dladdr_lock);
|
||||
|
||||
if (dli_main.dli_fbase != dli.dli_fbase) {
|
||||
fname = dli.dli_fname;
|
||||
p = strrchr(fname, '/');
|
||||
|
Loading…
x
Reference in New Issue
Block a user