threshhold and ./configure option for lock profiler
This commit is contained in:
parent
ac29400e34
commit
0214012508
|
@ -377,6 +377,14 @@ AC_ARG_ENABLE(
|
|||
fi]
|
||||
)
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[lock-profiler],
|
||||
AS_HELP_STRING([--enable-lock-profiling],[enable lock/mutex profiling code (default is NO).]),
|
||||
[if test x$enableval = xyes; then
|
||||
lock_profiler=true
|
||||
fi]
|
||||
)
|
||||
|
||||
AC_ARG_ENABLE(
|
||||
[unit-tests],
|
||||
AS_HELP_STRING([--enable-unit-tests],[enable unit tests on IKEv2 daemon startup (default is NO).]),
|
||||
|
@ -899,6 +907,7 @@ dnl =============
|
|||
AM_CONDITIONAL(USE_SMARTCARD, test x$smartcard = xtrue)
|
||||
AM_CONDITIONAL(USE_CISCO_QUIRKS, test x$cisco_quirks = xtrue)
|
||||
AM_CONDITIONAL(USE_LEAK_DETECTIVE, test x$leak_detective = xtrue)
|
||||
AM_CONDITIONAL(USE_LOCK_PROFILER, test x$lock_profiler = xtrue)
|
||||
AM_CONDITIONAL(USE_NAT_TRANSPORT, test x$nat_transport = xtrue)
|
||||
AM_CONDITIONAL(USE_VENDORID, test x$vendor_id = xtrue)
|
||||
AM_CONDITIONAL(USE_XAUTH_VID, test x$xauth_vid = xtrue)
|
||||
|
|
|
@ -64,6 +64,10 @@ if USE_LEAK_DETECTIVE
|
|||
libstrongswan_la_SOURCES += utils/leak_detective.c utils/leak_detective.h
|
||||
endif
|
||||
|
||||
if USE_LOCK_PROFILER
|
||||
AM_CFLAGS += -DLOCK_PROFILER
|
||||
endif
|
||||
|
||||
if USE_INTEGRITY_TEST
|
||||
libstrongswan_la_SOURCES += \
|
||||
fips/fips_canister_end.c
|
||||
|
|
|
@ -27,6 +27,10 @@
|
|||
#include <time.h>
|
||||
#include <errno.h>
|
||||
|
||||
/**
|
||||
* Do not report mutexes with an overall waiting time smaller than this (in us)
|
||||
*/
|
||||
#define PROFILE_TRESHHOLD 1000
|
||||
|
||||
typedef struct private_mutex_t private_mutex_t;
|
||||
typedef struct private_r_mutex_t private_r_mutex_t;
|
||||
|
@ -103,17 +107,18 @@ struct private_condvar_t {
|
|||
};
|
||||
|
||||
#ifdef LOCK_PROFILER
|
||||
|
||||
#include <execinfo.h>
|
||||
|
||||
/**
|
||||
* Print and cleanup mutex profiler
|
||||
*/
|
||||
static void profiler_cleanup(private_mutex_t *this)
|
||||
{
|
||||
fprintf(stderr, "waited %d.%06ds in mutex, created at:",
|
||||
this->waited.tv_sec, this->waited.tv_usec);
|
||||
this->backtrace->log(this->backtrace, stderr);
|
||||
if (this->waited.tv_sec > 0 ||
|
||||
this->waited.tv_usec > PROFILE_TRESHHOLD)
|
||||
{
|
||||
fprintf(stderr, "waited %d.%06ds in mutex, created at:",
|
||||
this->waited.tv_sec, this->waited.tv_usec);
|
||||
this->backtrace->log(this->backtrace, stderr);
|
||||
}
|
||||
this->backtrace->destroy(this->backtrace);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue