From 04fa5b4957d4d668be612ded509d6d6c8070d270 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 22 Nov 2011 10:10:30 +0100 Subject: s4:libcli/smb2: make sure only one idle event runs at a time metze --- source4/libcli/smb2/transport.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'source4/libcli/smb2/transport.c') diff --git a/source4/libcli/smb2/transport.c b/source4/libcli/smb2/transport.c index 01f363b0a0..55281d2b49 100644 --- a/source4/libcli/smb2/transport.c +++ b/source4/libcli/smb2/transport.c @@ -438,12 +438,16 @@ static void idle_handler(struct tevent_context *ev, { struct smb2_transport *transport = talloc_get_type(private_data, struct smb2_transport); - struct timeval next = timeval_add(&t, 0, transport->idle.period); - tevent_add_timer(transport->ev, - transport, - next, - idle_handler, transport); + struct timeval next; + transport->idle.func(transport, transport->idle.private_data); + + next = timeval_current_ofs_usec(transport->idle.period); + transport->idle.te = tevent_add_timer(transport->ev, + transport, + next, + idle_handler, + transport); } /* @@ -455,12 +459,15 @@ void smb2_transport_idle_handler(struct smb2_transport *transport, uint64_t period, void *private_data) { + TALLOC_FREE(transport->idle.te); + transport->idle.func = idle_func; transport->idle.private_data = private_data; transport->idle.period = period; - tevent_add_timer(transport->ev, - transport, - timeval_current_ofs(0, period), - idle_handler, transport); + transport->idle.te = tevent_add_timer(transport->ev, + transport, + timeval_current_ofs_usec(period), + idle_handler, + transport); } -- cgit