diff options
| -rw-r--r-- | source3/smbd/process.c | 6 | ||||
| -rw-r--r-- | source3/smbd/server.c | 18 | 
2 files changed, 18 insertions, 6 deletions
diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 7421c16b40..03b1e007ba 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -809,17 +809,13 @@ static BOOL smbd_process_limit(void)  		 * subtracts one.  		 */ -		total_smbds = 1; /* In case we need to create the entry. */ -  		if (!conn_tdb_ctx()) {  			DEBUG(0,("smbd_process_limit: max smbd processes parameter set with status parameter not \  set. Ignoring max smbd restriction.\n"));  			return False;  		} -		if (tdb_change_int32_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, 1) == -1) -			return True; - +		total_smbds = increment_smbd_process_count();  		return total_smbds > lp_max_smbd_processes();  	}  	else diff --git a/source3/smbd/server.c b/source3/smbd/server.c index c5474a46b8..6ed2cdac96 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -526,12 +526,28 @@ static BOOL dump_core(void)  update the current smbd process count  ****************************************************************************/ -static void decrement_smbd_process_count(void) +static BOOL process_count_update_successful = False; + +int32 increment_smbd_process_count(void)  {  	int32 total_smbds;  	if (lp_max_smbd_processes()) {  		total_smbds = 0; +		if (tdb_change_int32_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, -1) == -1) +			return 1; +		process_count_update_successful = True; +		return total_smbds + 1; +	} +	return 1; +} + +static void decrement_smbd_process_count(void) +{ +	int32 total_smbds; + +	if (lp_max_smbd_processes() && process_count_update_successful) { +		total_smbds = 1;  		tdb_change_int32_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, -1);  	}  }  | 
