summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2003-01-17 06:35:33 +0000
committerJeremy Allison <jra@samba.org>2003-01-17 06:35:33 +0000
commit074c99a852ce79f4c7791d709b82dc80c32e4d04 (patch)
tree7bbc22942d8a5fd227e981187eb2e49eb8a3a251
parent96c795cea7518b50a40caba34e656f056a832589 (diff)
downloadsamba-074c99a852ce79f4c7791d709b82dc80c32e4d04.tar.gz
samba-074c99a852ce79f4c7791d709b82dc80c32e4d04.tar.bz2
samba-074c99a852ce79f4c7791d709b82dc80c32e4d04.zip
Fix reference count bug where smbd's would not terminate with no
open resources. Jeremy. (This used to be commit 0173d6fe164568a73247fa542895443fad6c20c3)
-rw-r--r--source3/rpc_server/srv_lsa_hnd.c17
-rw-r--r--source3/smbd/conn.c13
2 files changed, 12 insertions, 18 deletions
diff --git a/source3/rpc_server/srv_lsa_hnd.c b/source3/rpc_server/srv_lsa_hnd.c
index 2d04d72323..814fa60aab 100644
--- a/source3/rpc_server/srv_lsa_hnd.c
+++ b/source3/rpc_server/srv_lsa_hnd.c
@@ -137,14 +137,6 @@ BOOL create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void (*free_fn)(void *)
DLIST_ADD(p->pipe_handles->Policy, pol);
p->pipe_handles->count++;
- /*
- * Ensure we don't idle this connection if a handle is open.
- * Increment the number of files open on the first handle create.
- */
-
- if (p->pipe_handles->count == 1)
- p->conn->num_files_open++;
-
*hnd = pol->pol_hnd;
DEBUG(4,("Opened policy hnd[%d] ", (int)p->pipe_handles->count));
@@ -212,15 +204,6 @@ BOOL close_policy_hnd(pipes_struct *p, POLICY_HND *hnd)
p->pipe_handles->count--;
- /*
- * Ensure we can idle this connection if this is the last handle.
- * Decrement the number of files open on the last handle delete.
- */
-
- if (p->pipe_handles->count == 0)
- p->conn->num_files_open--;
-
-
DLIST_REMOVE(p->pipe_handles->Policy, pol);
ZERO_STRUCTP(pol);
diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c
index 22407348e8..c771f1254b 100644
--- a/source3/smbd/conn.c
+++ b/source3/smbd/conn.c
@@ -136,10 +136,12 @@ void conn_close_all(void)
}
/****************************************************************************
-idle inactive connections
+ Idle inactive connections.
****************************************************************************/
+
BOOL conn_idle_all(time_t t, int deadtime)
{
+ pipes_struct *plist = NULL;
BOOL allidle = True;
connection_struct *conn, *next;
@@ -154,6 +156,15 @@ BOOL conn_idle_all(time_t t, int deadtime)
allidle = False;
}
+ /*
+ * 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 (plist->pipe_handles && plist->pipe_handles->count)
+ allidle = False;
+
return allidle;
}