lib/util/time.c: timeval_current_ofs_usec
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 1 Jun 2011 01:54:51 +0000 (11:24 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 1 Jun 2011 08:38:47 +0000 (10:38 +0200)
Several places want "microseconds from current time", and several were
simply handing "usecs" values which could be over a million.

Using a helper to do this is safer and more readable.

I didn't replace any obviously correct callers (ie. constants).

I also renamed wait_nsec in source3/lib/util_sock.c; it's actually
microseconds not nanoseconds (introduced with this code in Volker's
19b783cc Async wrapper for open_socket_out_send/recv).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
lib/util/time.c
lib/util/time.h
source3/lib/util_sock.c
source3/smbd/fileio.c
source4/lib/socket/connect_multi.c
source4/libcli/raw/clitransport.c
source4/ntvfs/posix/pvfs_open.c
source4/ntvfs/posix/pvfs_write.c

index de1553aff8a3d388b3b71f9f9a6873733aefb865..d8fd4a3dfcc745a1ca42f69e1f9e57e55e617cd2 100644 (file)
@@ -588,6 +588,15 @@ _PUBLIC_ struct timeval timeval_current_ofs_msec(uint32_t msecs)
        return timeval_add(&tv, msecs / 1000, (msecs % 1000) * 1000);
 }
 
+/**
+  return a timeval microseconds into the future
+*/
+_PUBLIC_ struct timeval timeval_current_ofs_usec(uint32_t usecs)
+{
+       struct timeval tv = timeval_current();
+       return timeval_add(&tv, usecs / 1000000, usecs % 1000000);
+}
+
 /**
   compare two timeval structures. 
   Return -1 if tv1 < tv2
index 4e4f72f71fb675a4fa6a787d336be1162e760438..1f7f57db77709e1194377616849ab43e65c1171c 100644 (file)
@@ -217,6 +217,11 @@ _PUBLIC_ struct timeval timeval_current_ofs(uint32_t secs, uint32_t usecs);
 */
 _PUBLIC_ struct timeval timeval_current_ofs_msec(uint32_t msecs);
 
+/**
+  return a timeval microseconds into the future
+*/
+_PUBLIC_ struct timeval timeval_current_ofs_usec(uint32_t usecs);
+
 /**
   compare two timeval structures. 
   Return -1 if tv1 < tv2
index 5d20d74404b488f90e26f09bcf6e07c58ad3286b..5b01d11bc6271b87e4d0a0dc993cec72eddf0813 100644 (file)
@@ -524,7 +524,7 @@ struct open_socket_out_state {
        struct sockaddr_storage ss;
        socklen_t salen;
        uint16_t port;
-       int wait_nsec;
+       int wait_usec;
 };
 
 static void open_socket_out_connected(struct tevent_req *subreq);
@@ -560,7 +560,7 @@ struct tevent_req *open_socket_out_send(TALLOC_CTX *mem_ctx,
        state->ev = ev;
        state->ss = *pss;
        state->port = port;
-       state->wait_nsec = 10000;
+       state->wait_usec = 10000;
        state->salen = -1;
 
        state->fd = socket(state->ss.ss_family, SOCK_STREAM, 0);
@@ -571,7 +571,7 @@ struct tevent_req *open_socket_out_send(TALLOC_CTX *mem_ctx,
        talloc_set_destructor(state, open_socket_out_state_destructor);
 
        if (!tevent_req_set_endtime(
-                   result, ev, timeval_current_ofs(0, timeout*1000))) {
+                   result, ev, timeval_current_ofs_msec(timeout))) {
                goto fail;
        }
 
@@ -608,7 +608,7 @@ struct tevent_req *open_socket_out_send(TALLOC_CTX *mem_ctx,
        if ((subreq == NULL)
            || !tevent_req_set_endtime(
                    subreq, state->ev,
-                   timeval_current_ofs(0, state->wait_nsec))) {
+                   timeval_current_ofs(0, state->wait_usec))) {
                goto fail;
        }
        tevent_req_set_callback(subreq, open_socket_out_connected, result);
@@ -650,8 +650,8 @@ static void open_socket_out_connected(struct tevent_req *subreq)
                 * retry
                 */
 
-               if (state->wait_nsec < 250000) {
-                       state->wait_nsec *= 1.5;
+               if (state->wait_usec < 250000) {
+                       state->wait_usec *= 1.5;
                }
 
                subreq = async_connect_send(state, state->ev, state->fd,
@@ -662,7 +662,7 @@ static void open_socket_out_connected(struct tevent_req *subreq)
                }
                if (!tevent_req_set_endtime(
                            subreq, state->ev,
-                           timeval_current_ofs(0, state->wait_nsec))) {
+                           timeval_current_ofs_usec(state->wait_usec))) {
                        tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
                        return;
                }
index 5e0ea9041da53a9b379de19e70e709f3246002a8..3b317f9a8630459b06d4cb7fba94e2a6c7dd8b20 100644 (file)
@@ -241,7 +241,7 @@ void trigger_write_time_update(struct files_struct *fsp)
        /* trigger the update 2 seconds later */
        fsp->update_write_time_event =
                event_add_timed(server_event_context(), NULL,
-                               timeval_current_ofs(0, delay),
+                               timeval_current_ofs_usec(delay),
                                update_write_time_handler, fsp);
 }
 
index 300e5fb1e531e30331812e1fe6fd18a4abbcc97e..e3b58456c4c37df875ba8815f3609bf953693b26 100644 (file)
@@ -162,7 +162,7 @@ static void connect_multi_next_socket(struct composite_context *result)
                   connect attempt state, so it will go away when this
                   request completes */
                event_add_timed(result->event_ctx, state,
-                               timeval_current_ofs(0, MULTI_PORT_DELAY),
+                               timeval_current_ofs_usec(MULTI_PORT_DELAY),
                                connect_multi_timer, result);
        }
 }
index 7a3993c79bf5083ddddb3a9709e9f3266c96e02d..43316692a41bd5df1399b9aae76e4cae3255d612 100644 (file)
@@ -338,7 +338,7 @@ _PUBLIC_ void smbcli_transport_idle_handler(struct smbcli_transport *transport,
 
        transport->socket->event.te = event_add_timed(transport->socket->event.ctx, 
                                                      transport,
-                                                     timeval_current_ofs(0, period),
+                                                     timeval_current_ofs_usec(period),
                                                      idle_handler, transport);
 }
 
index dfe2f2aa628c08ccfb5147ce615368c425d92ef0..d56bce58f75273d48e436e4a83713cb77c70abc6 100644 (file)
@@ -1174,7 +1174,7 @@ static NTSTATUS pvfs_open_setup_retry(struct ntvfs_module_context *ntvfs,
                *final_timeout = timeval_add(&req->statistics.request_time,
                                             pvfs->oplock_break_timeout,
                                             0);
-               end_time = timeval_current_ofs(0, (pvfs->sharing_violation_delay*4)/5);
+               end_time = timeval_current_ofs_usec((pvfs->sharing_violation_delay*4)/5);
                end_time = timeval_min(final_timeout, &end_time);
        } else {
                return NT_STATUS_INTERNAL_ERROR;
index fb629a87fb30b1c8994f2cbb1af02fc81bef4b23..892d3dd7495f04a18fa42731d99711fb09e1fb79 100644 (file)
@@ -64,7 +64,7 @@ static void pvfs_trigger_write_time_update(struct pvfs_file_handle *h)
                return;
        }
 
-       tv = timeval_current_ofs(0, pvfs->writetime_delay);
+       tv = timeval_current_ofs_usec(pvfs->writetime_delay);
 
        h->write_time.update_triggered = true;
        h->write_time.update_on_close = true;