From 399b57eadaee65c1860db3dea7b56d873b2025c4 Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Sat, 6 Dec 2003 05:37:00 +0000 Subject: [PATCH] Use gmtime_r() if HAVE_GMTIME_R is defined (need to add autoconf check) --- servers/slapd/init.c | 4 ++++ servers/slapd/modify.c | 9 +++++++++ servers/slapd/proto-slap.h | 2 ++ servers/slapd/schema.c | 9 +++++++++ 4 files changed, 24 insertions(+) diff --git a/servers/slapd/init.c b/servers/slapd/init.c index d44220bb08..6ab7262322 100644 --- a/servers/slapd/init.c +++ b/servers/slapd/init.c @@ -65,7 +65,9 @@ struct berval NoAttrs = BER_BVC( LDAP_NO_ATTRS ); */ ldap_pvt_thread_pool_t connection_pool; int connection_pool_max = SLAP_MAX_WORKER_THREADS; +#ifndef HAVE_GMTIME_R ldap_pvt_thread_mutex_t gmtime_mutex; +#endif #if defined( SLAPD_CRYPT ) || defined( SLAPD_SPASSWD ) ldap_pvt_thread_mutex_t passwd_mutex; #endif @@ -153,7 +155,9 @@ slap_init( int mode, const char *name ) } #endif +#ifndef HAVE_GMTIME_R ldap_pvt_thread_mutex_init( &gmtime_mutex ); +#endif #if defined( SLAPD_CRYPT ) || defined( SLAPD_SPASSWD ) ldap_pvt_thread_mutex_init( &passwd_mutex ); #endif diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index 3f62017949..1211979cb3 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -801,15 +801,24 @@ int slap_mods_opattrs( if ( SLAP_LASTMOD( op->o_bd )) { struct tm *ltm; +#ifdef HAVE_GMTIME_R + struct tm ltm_buf; +#endif time_t now = slap_get_time(); +#ifdef HAVE_GMTIME_R + ltm = gmtime_r( &now, <m_buf ); +#else ldap_pvt_thread_mutex_lock( &gmtime_mutex ); ltm = gmtime( &now ); +#endif /* HAVE_GMTIME_R */ lutil_gentime( timebuf, sizeof(timebuf), ltm ); slap_get_csn( op, csnbuf, sizeof(csnbuf), &csn, 1 ); +#ifndef HAVE_GMTIME_R ldap_pvt_thread_mutex_unlock( &gmtime_mutex ); +#endif timestamp.bv_val = timebuf; timestamp.bv_len = strlen(timebuf); diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index fe119359ad..bc178d040f 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -1242,7 +1242,9 @@ LDAP_SLAPD_V (ldap_pvt_thread_mutex_t) replog_mutex; #if defined( SLAPD_CRYPT ) || defined( SLAPD_SPASSWD ) LDAP_SLAPD_V (ldap_pvt_thread_mutex_t) passwd_mutex; #endif +#ifndef HAVE_GMTIME_R LDAP_SLAPD_V (ldap_pvt_thread_mutex_t) gmtime_mutex; +#endif LDAP_SLAPD_V (AccessControl *) global_acl; diff --git a/servers/slapd/schema.c b/servers/slapd/schema.c index f99fb5d37d..12c2cfcf9f 100644 --- a/servers/slapd/schema.c +++ b/servers/slapd/schema.c @@ -132,6 +132,9 @@ schema_info( Entry **entry, const char **text ) { struct tm *ltm; +#ifdef HAVE_GMTIME_R + struct tm ltm_buf; +#endif char timebuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; /* @@ -145,10 +148,16 @@ schema_info( Entry **entry, const char **text ) * AND modified at server startup time ... */ +#ifdef HAVE_GMTIME_R + ltm = gmtime_r( &starttime, <m_buf ); +#else ldap_pvt_thread_mutex_lock( &gmtime_mutex ); ltm = gmtime( &starttime ); +#endif /* HAVE_GMTIME_R */ lutil_gentime( timebuf, sizeof(timebuf), ltm ); +#ifndef HAVE_GMTIME_R ldap_pvt_thread_mutex_unlock( &gmtime_mutex ); +#endif vals[0].bv_val = timebuf; vals[0].bv_len = strlen( timebuf ); -- 2.39.5