[Samba] Smbd hanging

Martin Zielinski mz at seh.de
Wed Mar 29 13:56:47 GMT 2006


Bruno Gomes Pessanha wrote:
> I'm having the same problem... but with a 520 print queues samba server and
> 20.000 AD users.
> I'm getting desperate! I did a lot of tuning changes..... but nothing helps!
> 
> Bruno
> 
[...]

If i remember correctly, the original description of the problem has 
been, that the number of smbd proccess is growing until this breaks the 
whole system (correct me, if I'm  wrong).

In your case the reason might be that clients leave *one* spoolss-pipe 
open, after they have opened (and closed) a connection to a printer. The 
deadtime parameter is not working, because of this one open connection.
BTW, this is diffrent to connections with admin rights.

To fix this, I add the following lines to smbd/conn.c:
---- start code
	for (conn=Connections;conn;conn=next) {
		next=conn->next;
		/* close dirptrs on connections that are idle */
		if ((t-conn->lastused) > DPTR_IDLE_TIMEOUT)
			dptr_idlecnum(conn);
+	/* force the closure, even if one spoolss is open */
+		if (conn->num_files_open == 1 && (t-conn->lastused)>=deadtime) {
+			for (plist = get_first_internal_pipe(); plist; 	
+                            plist = get_next_internal_pipe(plist)) {
+				if (plist->name && !strcmp (plist->name, "spoolss")) {
+					DEBUG(2,("Client holds one spoolss connection. Deadtime reached. 
Closing last pipe\n"));
+					pipe_close_conn (conn);
+					break;
+				}
+			}
+		}
+
		if (conn->num_files_open > 0 ||
		    (t-conn->lastused)<deadtime)
			allidle = False;
	}
---- end code

If the description meets your existing problem, this might help.
(There was an earlier discussion with Gerald Carter about this topic - 
this might be his code or merged with mine - I don't remember excactly)

Bye,
Martin

> --
> ---
> Bruno Gomes Pessanha
> LPI Brasil


-- 
Martin Zielinski             mz at seh.de
Software Development
SEH Computertechnik GmbH     www.seh.de


More information about the samba mailing list