r15088: Remove all time() and gettimeofday() calls out of the mainline
authorJeremy Allison <jra@samba.org>
Sat, 15 Apr 2006 04:07:10 +0000 (04:07 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:16:22 +0000 (11:16 -0500)
packet processing code. Only do these when needed (ie. in the
idle timeout code). We drop an unneccessary global here too.
Jeremy.

source/auth/auth_sam.c
source/include/smb.h
source/smbd/conn.c
source/smbd/oplock.c
source/smbd/process.c
source/smbd/service.c

index 740170d73d028736131429346de6abc08e836144..94e4ec414b60fdf80e024f29d93464e12253e8df 100644 (file)
@@ -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 */
index be994a9fdd8a42d6f4b51d1f6120ba0652c407ca..f6ee42970257a89383883ca7e64acbbfd952cd75 100644 (file)
@@ -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. */
index b41467f02c7514706903df5776b4ade436476550..5aa8901d597bcf84ed2f4398f9aea7a5d74dbdc3 100644 (file)
@@ -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;
+               }
        }
 
        /*
index 61e812d43a8ac4406213b7fd388528cfbd0256fd..70e5bf4d727b88190cad141064129d57608195e2 100644 (file)
@@ -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);
        }
 }
 
index ba14e57c54a3bdc07b6c2c94bf55ce8ab80e3821..aaf98203a257616cc1bc32455e340ccce36a04ba 100644 (file)
@@ -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();
index 5c4974329c79291c4349ebc9394622506360dc51..ba87d0743daf5ffc8b05df38b5a683808b44165b 100644 (file)
@@ -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);