summaryrefslogtreecommitdiff
path: root/source4/libcli/raw/clitransport.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-11-03 10:09:48 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:23 -0500
commitdde07058075d357cfdc63624c8dcaa67ebd40add (patch)
treec3f29090e37f1bc103a3d6051e708d1ebbe305a5 /source4/libcli/raw/clitransport.c
parent90a8c4acc7e673e6439197776d19cc4b095ac322 (diff)
downloadsamba-dde07058075d357cfdc63624c8dcaa67ebd40add.tar.gz
samba-dde07058075d357cfdc63624c8dcaa67ebd40add.tar.bz2
samba-dde07058075d357cfdc63624c8dcaa67ebd40add.zip
r3507: - added deferred replies on sharing violation in pvfs open. The
deferred reply is short-circuited immediately when the file is closed by another user, allowing it to be opened by the waiting user. - added a sane set of timeval manipulation routines - converted all the events code and code that uses it to use struct timeval instead of time_t, which allows for microsecond resolution instead of 1 second resolution. This was needed for doing the pvfs deferred open code, and is why the patch is so big. (This used to be commit 0d51511d408d91eb5f68a35e980e0875299b1831)
Diffstat (limited to 'source4/libcli/raw/clitransport.c')
-rw-r--r--source4/libcli/raw/clitransport.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/source4/libcli/raw/clitransport.c b/source4/libcli/raw/clitransport.c
index 00e52f3a14..52cb4d8beb 100644
--- a/source4/libcli/raw/clitransport.c
+++ b/source4/libcli/raw/clitransport.c
@@ -33,7 +33,7 @@ static void smbcli_transport_process_send(struct smbcli_transport *transport);
an event has happened on the socket
*/
static void smbcli_transport_event_handler(struct event_context *ev, struct fd_event *fde,
- time_t t, uint16_t flags)
+ struct timeval t, uint16_t flags)
{
struct smbcli_transport *transport = fde->private;
@@ -233,21 +233,21 @@ again:
}
static void idle_handler(struct event_context *ev,
- struct timed_event *te, time_t t)
+ struct timed_event *te, struct timeval t)
{
struct smbcli_transport *transport = te->private;
- te->next_event = t + transport->idle.period;
+ te->next_event = timeval_add(&te->next_event, 0, transport->idle.period);
transport->idle.func(transport, transport->idle.private);
}
/*
setup the idle handler for a transport
- the period is in seconds
+ the period is in microseconds
*/
void smbcli_transport_idle_handler(struct smbcli_transport *transport,
- void (*idle_func)(struct smbcli_transport *, void *),
- uint_t period,
- void *private)
+ void (*idle_func)(struct smbcli_transport *, void *),
+ uint64_t period,
+ void *private)
{
struct timed_event te;
transport->idle.func = idle_func;
@@ -258,7 +258,7 @@ void smbcli_transport_idle_handler(struct smbcli_transport *transport,
event_remove_timed(transport->event.ctx, transport->event.te);
}
- te.next_event = time(NULL) + period;
+ te.next_event = timeval_current_ofs(0, period);
te.handler = idle_handler;
te.private = transport;
transport->event.te = event_add_timed(transport->event.ctx, &te);