X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foperation.c;h=ebedbde8faf4d1ccd56291d6a95f146253b46253;hb=1c963f473945e9902c1682d917baa58002a9ab95;hp=eeb312560041b5af9e23beb1fafd5c8f1cdc61cb;hpb=13a8b6110acb64afac50002aac76ac027ae5f1b4;p=openldap diff --git a/servers/slapd/operation.c b/servers/slapd/operation.c index eeb3125600..ebedbde8fa 100644 --- a/servers/slapd/operation.c +++ b/servers/slapd/operation.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2015 The OpenLDAP Foundation. + * Copyright 1998-2017 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -38,7 +38,8 @@ #endif static ldap_pvt_thread_mutex_t slap_op_mutex; -static struct timeval last_time; +static time_t last_time; +static int last_incr; void slap_op_init(void) { @@ -159,30 +160,18 @@ void slap_op_time(time_t *t, int *nop) { struct timeval tv; -#if SLAP_STATS_ETIME - gettimeofday( &tv, NULL ); -#else - tv.tv_sec = slap_get_time(); - tv.tv_usec = 0; -#endif ldap_pvt_thread_mutex_lock( &slap_op_mutex ); - /* Usually tv.tv_sec cannot be < last_time.tv_sec - * but it might happen if we wrapped around tv_usec. - */ - if ( tv.tv_sec <= last_time.tv_sec && - tv.tv_usec <= last_time.tv_usec ) { - tv.tv_sec = last_time.tv_sec; - tv.tv_usec = last_time.tv_usec + 1; - if (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - last_time.tv_sec = tv.tv_sec; - } + gettimeofday( &tv, NULL ); + *t = tv.tv_sec; + if ( *t == last_time ) { + *nop = ++last_incr; + } else { + last_time = *t; + last_incr = 0; + *nop = 0; } - last_time.tv_usec = tv.tv_usec; ldap_pvt_thread_mutex_unlock( &slap_op_mutex ); - *t = tv.tv_sec; - *nop = tv.tv_usec; + nop[1] = tv.tv_usec; } Operation *