From 83219da3028a0341a9c7b2db38738ca30288686b Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 22 Oct 2002 22:17:29 +0000 Subject: Fix for systems that allow more than 65536 open files per process. Jeremy. (This used to be commit 947a56ce00e552e8b8d2ed64435eabde6225f044) --- source3/include/local.h | 3 +++ source3/rpc_server/srv_pipe_hnd.c | 4 ---- source3/smbd/files.c | 9 ++++++++- 3 files changed, 11 insertions(+), 5 deletions(-) (limited to 'source3') diff --git a/source3/include/local.h b/source3/include/local.h index 2be9c1e101..20fa5ff52a 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -213,4 +213,7 @@ /* Max number of jobs per print queue. */ #define PRINT_MAX_JOBID 10000 +/* Max number of open RPC pipes. */ +#define MAX_OPEN_PIPES 2048 + #endif diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c index cc6e4b95f9..1695419687 100644 --- a/source3/rpc_server/srv_pipe_hnd.c +++ b/source3/rpc_server/srv_pipe_hnd.c @@ -31,10 +31,6 @@ static smb_np_struct *chain_p; static int pipes_open; -#ifndef MAX_OPEN_PIPES -#define MAX_OPEN_PIPES 2048 -#endif - /* * Sometimes I can't decide if I hate Windows printer driver * writers more than I hate the Windows spooler service driver diff --git a/source3/smbd/files.c b/source3/smbd/files.c index c055fb54eb..d926718c5d 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -112,6 +112,8 @@ files_struct *file_new(connection_struct *conn) files_used++; fsp->fnum = i + FILE_HANDLE_OFFSET; + SMB_ASSERT(fsp->fnum < 65536); + string_set(&fsp->fsp_name,""); DLIST_ADD(Files, fsp); @@ -144,7 +146,7 @@ void file_close_conn(connection_struct *conn) Initialise file structures. ****************************************************************************/ -#define MAX_OPEN_FUDGEFACTOR 10 +#define MAX_OPEN_FUDGEFACTOR 20 void file_init(void) { @@ -160,11 +162,16 @@ void file_init(void) real_max_open_files = real_lim - MAX_OPEN_FUDGEFACTOR; + if (real_max_open_files + FILE_HANDLE_OFFSET + MAX_OPEN_PIPES > 65536) + real_max_open_files = 65536 - FILE_HANDLE_OFFSET - MAX_OPEN_PIPES; + if(real_max_open_files != request_max_open_files) { DEBUG(1,("file_init: Information only: requested %d \ open files, %d are available.\n", request_max_open_files, real_max_open_files)); } + SMB_ASSERT(real_max_open_files > 100); + file_bmap = bitmap_allocate(real_max_open_files); if (!file_bmap) { -- cgit