]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
import fix to ITS#4989
[openldap] / servers / slapd / daemon.c
index ccafda3a12bfab3202c8d9efe297d93d8fe9d715..a5c6d6cb69c2eb371e2906187c1d77cbd498eab6 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2006 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -1601,7 +1601,7 @@ slap_listener(
 #endif /* LDAP_PF_LOCAL */
 
        Debug( LDAP_DEBUG_TRACE,
-               ">>> slap_listener(%s)",
+               ">>> slap_listener(%s)\n",
                sl->sl_url.bv_val, 0, 0 );
 
        peername[0] = '\0';
@@ -2124,8 +2124,14 @@ slapd_daemon_task(
                ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
 
                if ( rtask && cat.tv_sec ) {
-                       time_t diff = difftime( cat.tv_sec, now );
-                       if ( diff == 0 ) diff = tdelta;
+                       /* NOTE: diff __should__ always be >= 0,
+                        * AFAI understand; however (ITS#4872),
+                        * time_t might be unsigned in some systems,
+                        * while difftime() returns a double */
+                       double diff = difftime( cat.tv_sec, now );
+                       if ( diff <= 0 ) {
+                               diff = tdelta;
+                       }
                        if ( tvp == NULL || diff < tv.tv_sec ) {
                                tv.tv_sec = diff;
                                tv.tv_usec = 0;