s3:smbd add utility function to check if there are open pipes
authorSimo Sorce <ssorce@redhat.com>
Mon, 7 Jun 2010 18:08:05 +0000 (14:08 -0400)
committerSimo Sorce <ssorce@redhat.com>
Mon, 7 Jun 2010 21:25:48 +0000 (17:25 -0400)
source3/include/proto.h
source3/rpc_server/rpc_ncacn_np_internal.c
source3/smbd/conn.c

index 3d25688cf31cea9a642c8a2ad926512811dbc8df..2f68f0efc6cad2215414fe0dc0b4d878c49a68b6 100644 (file)
@@ -5208,6 +5208,7 @@ bool api_pipe_request(pipes_struct *p);
 
 pipes_struct *get_first_internal_pipe(void);
 pipes_struct *get_next_internal_pipe(pipes_struct *p);
+bool check_open_pipes(void);
 
 bool fsp_is_np(struct files_struct *fsp);
 struct tsocket_address;
index f5a3737844dc87097a367e9f533132709674cab0..18251c688ee9db32c0d4c7d6808285b45b368117 100644 (file)
@@ -68,6 +68,18 @@ static void free_pipe_rpc_context_internal( PIPE_RPC_FNS *list )
        return;
 }
 
+bool check_open_pipes(void)
+{
+       pipes_struct *p;
+
+       for (p = InternalPipes; p != NULL; p = p->next) {
+               if (num_pipe_handles(p) != 0) {
+                       return true;
+               }
+       }
+       return false;
+}
+
 /****************************************************************************
  Close an rpc pipe.
 ****************************************************************************/
index afb7a7fa85b758e5f62684a0a56a5165e75d320f..707f6c4aa18e40875c90555ab09dce2e201aded5 100644 (file)
@@ -213,7 +213,6 @@ bool conn_close_all(struct smbd_server_connection *sconn)
 bool conn_idle_all(struct smbd_server_connection *sconn,time_t t)
 {
        int deadtime = lp_deadtime()*60;
-       pipes_struct *plist = NULL;
        connection_struct *conn;
 
        if (deadtime <= 0)
@@ -243,14 +242,10 @@ bool conn_idle_all(struct smbd_server_connection *sconn,time_t t)
         * Check all pipes for any open handles. We cannot
         * idle with a handle open.
         */
-
-       for (plist = get_first_internal_pipe(); plist;
-            plist = get_next_internal_pipe(plist)) {
-               if (num_pipe_handles(plist->pipe_handles) != 0) {
-                       return False;
-               }
+       if (check_open_pipes()) {
+               return False;
        }
-       
+
        return True;
 }