]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Readding changes that got lost during refactoring/rebasing.
authorTobias Brunner <tobias@strongswan.org>
Thu, 17 Dec 2009 14:58:46 +0000 (15:58 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 23 Dec 2009 16:03:41 +0000 (17:03 +0100)
src/libstrongswan/threading/lock_profiler.h

index b8359c629cca0f3f353cf9dde8d0ed5caeb5575d..b64453ba158f1c445ec3505236f79e524ec5f374 100644 (file)
 /**
  * Do not report mutexes with an overall waiting time smaller than this (in us)
  */
-#define PROFILE_TRESHHOLD 1000
+#define PROFILE_WAIT_TRESHHOLD 10000
+
+/**
+ * Do not report mutexes with an overall lock count smaller than this
+ */
+#define PROFILE_LOCK_TRESHHOLD 1000
 
 #include <utils/backtrace.h>
 
@@ -36,6 +41,11 @@ struct lock_profile_t {
         */
        timeval_t waited;
 
+       /**
+        * How many times the lock has been invoked
+        */
+       u_int locked;
+
        /**
         * backtrace where mutex has been created
         */
@@ -48,10 +58,11 @@ struct lock_profile_t {
 static inline void profiler_cleanup(lock_profile_t *profile)
 {
        if (profile->waited.tv_sec > 0 ||
-               profile->waited.tv_usec > PROFILE_TRESHHOLD)
+               profile->waited.tv_usec > PROFILE_WAIT_TRESHHOLD ||
+               profile->locked > PROFILE_LOCK_TRESHHOLD)
        {
-               fprintf(stderr, "%d.%06ds in lock created at:",
-                               profile->waited.tv_sec, profile->waited.tv_usec);
+               fprintf(stderr, "%d.%03ds / %d times in lock created at:",
+                       profile->waited.tv_sec, profile->waited.tv_usec, profile->locked);
                profile->backtrace->log(profile->backtrace, stderr);
        }
        profile->backtrace->destroy(profile->backtrace);
@@ -64,10 +75,12 @@ static inline void profiler_init(lock_profile_t *profile)
 {
        profile->backtrace = backtrace_create(2);
        timerclear(&profile->waited);
+       profile->locked = 0;
 }
 
 #define profiler_start(profile) { \
        struct timeval _start, _end, _diff; \
+       (profile)->locked++; \
        time_monotonic(&_start);
 
 #define profiler_end(profile) \