[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Mon Jul 21 16:13:04 MDT 2014


The branch, master has been updated
       via  5907b0c sys_poll_intr: fix timeout arithmetic
      from  1dd6434 messaging4: Change irpc_servers_by_name to NTSTATUS

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 5907b0cc1e1ba60ae15b41e04ae4a217ce2815cd
Author: Daniel Kobras <d.kobras at science-computing.de>
Date:   Mon Jul 21 10:47:53 2014 +0200

    sys_poll_intr: fix timeout arithmetic
    
    Callers of sys_poll_intr() assume timeout to be in milliseconds like
    poll(2) expects, but implementation used nanosecond units. Also make
    sure timeout doesn't become infinite by mistake during time arithmetic.
    
    Signed-off-by: Daniel Kobras <d.kobras at science-computing.de>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Tue Jul 22 00:12:24 CEST 2014 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 lib/util/select.c |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/select.c b/lib/util/select.c
index 5e66344..99cd772 100644
--- a/lib/util/select.c
+++ b/lib/util/select.c
@@ -42,9 +42,19 @@ int sys_poll_intr(struct pollfd *fds, int num_fds, int timeout)
 		if (errno != EINTR) {
 			break;
 		}
+		/* Infinite timeout, no need to adjust. */
+		if (timeout < 0) {
+			continue;
+		}
 		clock_gettime_mono(&now);
-		elapsed = nsec_time_diff(&now, &start);
-		timeout = (orig_timeout - elapsed) / 1000000;
+		elapsed = nsec_time_diff(&now, &start) / 1000000;
+		timeout = orig_timeout - elapsed;
+		/* Unlikely, but might happen eg. when getting traced.
+		 * Make sure we're not hanging in this case.
+		 */
+		if (timeout < 0) {
+			timeout = 0;
+		}
 	};
 	return ret;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list