1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

lib/util/time.c: timeval_current_ofs_usec

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>
This commit is contained in:
Rusty Russell 2011-06-01 11:24:51 +09:30
parent 56e72337b0
commit 0204ae6229
8 changed files with 26 additions and 12 deletions

View 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

View 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

View 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;
}

View 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);
}

View 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);
}
}

View 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);
}

View 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;

View 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;