]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
import fix to ITS#4989
[openldap] / servers / slapd / daemon.c
index 5148e201ad0690cf4eee8cf11bacf3d6e83a54d8..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
@@ -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;