summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/auth/auth_sam.c4
-rw-r--r--source3/include/smb.h1
-rw-r--r--source3/smbd/conn.c16
-rw-r--r--source3/smbd/oplock.c18
-rw-r--r--source3/smbd/process.c4
-rw-r--r--source3/smbd/service.c5
6 files changed, 19 insertions, 29 deletions
diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c
index 740170d73d..94e4ec414b 100644
--- a/source3/auth/auth_sam.c
+++ b/source3/auth/auth_sam.c
@@ -23,8 +23,6 @@
#include "includes.h"
-extern struct timeval smb_last_time;
-
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_AUTH
@@ -87,7 +85,7 @@ static BOOL logon_hours_ok(struct samu *sampass)
return True;
}
- lasttime = (time_t)smb_last_time.tv_sec;
+ lasttime = time(NULL);
utctime = gmtime(&lasttime);
/* find the corresponding byte and bit */
diff --git a/source3/include/smb.h b/source3/include/smb.h
index be994a9fdd..f6ee429702 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -567,6 +567,7 @@ typedef struct connection_struct {
NT_USER_TOKEN *nt_user_token;
time_t lastused;
+ time_t lastused_count;
BOOL used;
int num_files_open;
unsigned int num_smb_operations; /* Count of smb operations on this tree. */
diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c
index b41467f02c..5aa8901d59 100644
--- a/source3/smbd/conn.c
+++ b/source3/smbd/conn.c
@@ -154,8 +154,9 @@ find_again:
}
/****************************************************************************
-close all conn structures
+ Close all conn structures.
****************************************************************************/
+
void conn_close_all(void)
{
connection_struct *conn, *next;
@@ -178,13 +179,20 @@ BOOL conn_idle_all(time_t t, int deadtime)
for (conn=Connections;conn;conn=next) {
next=conn->next;
+
+ /* Update if connection wasn't idle. */
+ if (conn->lastused != conn->lastused_count) {
+ conn->lastused = t;
+ }
+
/* close dirptrs on connections that are idle */
- if ((t-conn->lastused) > DPTR_IDLE_TIMEOUT)
+ if ((t-conn->lastused) > DPTR_IDLE_TIMEOUT) {
dptr_idlecnum(conn);
+ }
- if (conn->num_files_open > 0 ||
- (t-conn->lastused)<deadtime)
+ if (conn->num_files_open > 0 || (t-conn->lastused)<deadtime) {
allidle = False;
+ }
}
/*
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 61e812d43a..70e5bf4d72 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -27,7 +27,6 @@ static int32 exclusive_oplocks_open = 0;
static int32 level_II_oplocks_open = 0;
BOOL global_client_failed_oplock_break = False;
-extern struct timeval smb_last_time;
extern uint32 global_client_caps;
extern int smb_read_error;
@@ -277,21 +276,10 @@ static char *new_break_smb_message(TALLOC_CTX *mem_ctx,
static void wait_before_sending_break(void)
{
- struct timeval cur_tv;
- long wait_left = (long)lp_oplock_break_wait_time();
+ long wait_time = (long)lp_oplock_break_wait_time();
- if (wait_left == 0) {
- return;
- }
-
- GetTimeOfDay(&cur_tv);
-
- wait_left -= ((cur_tv.tv_sec - smb_last_time.tv_sec)*1000) +
- ((cur_tv.tv_usec - smb_last_time.tv_usec)/1000);
-
- if(wait_left > 0) {
- wait_left = MIN(wait_left, 1000);
- sys_usleep(wait_left * 1000);
+ if (wait_time) {
+ smb_msleep(wait_time);
}
}
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index ba14e57c54..aaf98203a2 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -26,8 +26,6 @@ extern int keepalive;
extern struct auth_context *negprot_global_auth_context;
extern int smb_echo_count;
-struct timeval smb_last_time;
-
static char *InBuffer = NULL;
static char *OutBuffer = NULL;
static char *current_inbuf = NULL;
@@ -1011,8 +1009,6 @@ static int construct_reply(char *inbuf,char *outbuf,int size,int bufsize)
int outsize = 0;
int msg_type = CVAL(inbuf,0);
- GetTimeOfDay(&smb_last_time);
-
chain_size = 0;
file_chain_reset();
reset_chain_p();
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 5c4974329c..ba87d0743d 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -20,7 +20,6 @@
#include "includes.h"
-extern struct timeval smb_last_time;
extern userdom_struct current_user_info;
/****************************************************************************
@@ -140,7 +139,7 @@ BOOL set_current_service(connection_struct *conn, uint16 flags, BOOL do_chdir)
return(False);
}
- conn->lastused = smb_last_time.tv_sec;
+ conn->lastused_count++;
snum = SNUM(conn);
@@ -601,7 +600,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
safe_strcpy(conn->client_address, client_addr(),
sizeof(conn->client_address)-1);
conn->num_files_open = 0;
- conn->lastused = time(NULL);
+ conn->lastused = conn->lastused_count = time(NULL);
conn->service = snum;
conn->used = True;
conn->printer = (strncmp(dev,"LPT",3) == 0);