diff options
author | Jeremy Allison <jra@samba.org> | 1999-02-05 01:59:08 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 1999-02-05 01:59:08 +0000 |
commit | 8159f2ae21ec35b8d9d0045d14099062cf51c368 (patch) | |
tree | fbf2afd6005f95683b4146124c222f99395ba622 /source | |
parent | f285470006ad0219970f3046fc5c426328b7ebb6 (diff) | |
download | samba-8159f2ae21ec35b8d9d0045d14099062cf51c368.tar.gz samba-8159f2ae21ec35b8d9d0045d14099062cf51c368.tar.xz samba-8159f2ae21ec35b8d9d0045d14099062cf51c368.zip |
Directory tidyups to help me track any problems.
Upped MAX_OPEN_DIRECTORIES to 256.
Ensured new directory handles are only allocated between 255 - MAX.
Stopped re-open of a directory about to be closed.
Log a message if a directory is to be closed and the bitmap
is not set.
Jeremy.
Diffstat (limited to 'source')
-rw-r--r-- | source/include/local.h | 2 | ||||
-rw-r--r-- | source/smbd/dir.c | 29 |
2 files changed, 18 insertions, 13 deletions
diff --git a/source/include/local.h b/source/include/local.h index 92288a20b80..e81a8d4dbf0 100644 --- a/source/include/local.h +++ b/source/include/local.h @@ -32,7 +32,7 @@ /* max number of directories open at once */ /* note that with the new directory code this no longer requires a file handle per directory, but large numbers do use more memory */ -#define MAX_OPEN_DIRECTORIES 64 +#define MAX_OPEN_DIRECTORIES 256 /* max number of directory handles */ /* As this now uses the bitmap code this can be diff --git a/source/smbd/dir.c b/source/smbd/dir.c index 096b3195761..f4d25170081 100644 --- a/source/smbd/dir.c +++ b/source/smbd/dir.c @@ -114,13 +114,13 @@ static void dptr_idleoldest(void) Get the dptr_struct for a dir index. ****************************************************************************/ -static dptr_struct *dptr_get(int key) +static dptr_struct *dptr_get(int key, BOOL forclose) { dptr_struct *dptr; for(dptr = dirptrs; dptr; dptr = dptr->next) { if(dptr->dnum == key) { - if (!dptr->ptr) { + if (!forclose && !dptr->ptr) { if (dptrs_open >= MAX_OPEN_DIRECTORIES) dptr_idleoldest(); DEBUG(4,("Reopening dptr key %d\n",key)); @@ -140,7 +140,7 @@ static dptr_struct *dptr_get(int key) static void *dptr_ptr(int key) { - dptr_struct *dptr = dptr_get(key); + dptr_struct *dptr = dptr_get(key, False); if (dptr) return(dptr->ptr); @@ -153,7 +153,7 @@ static void *dptr_ptr(int key) char *dptr_path(int key) { - dptr_struct *dptr = dptr_get(key); + dptr_struct *dptr = dptr_get(key, False); if (dptr) return(dptr->path); @@ -166,7 +166,7 @@ char *dptr_path(int key) char *dptr_wcard(int key) { - dptr_struct *dptr = dptr_get(key); + dptr_struct *dptr = dptr_get(key, False); if (dptr) return(dptr->wcard); @@ -180,7 +180,7 @@ char *dptr_wcard(int key) BOOL dptr_set_wcard(int key, char *wcard) { - dptr_struct *dptr = dptr_get(key); + dptr_struct *dptr = dptr_get(key, False); if (dptr) { dptr->wcard = wcard; @@ -196,7 +196,7 @@ BOOL dptr_set_wcard(int key, char *wcard) BOOL dptr_set_attr(int key, uint16 attr) { - dptr_struct *dptr = dptr_get(key); + dptr_struct *dptr = dptr_get(key, False); if (dptr) { dptr->attr = attr; @@ -211,7 +211,7 @@ BOOL dptr_set_attr(int key, uint16 attr) uint16 dptr_attr(int key) { - dptr_struct *dptr = dptr_get(key); + dptr_struct *dptr = dptr_get(key, False); if (dptr) return(dptr->attr); @@ -233,6 +233,11 @@ static void dptr_close_internal(dptr_struct *dptr) * biased by one with respect to the bitmap. */ + if(bitmap_query( dptr_bmap, dptr->dnum - 1) != True) { + DEBUG(0,("dptr_close_internal : Error - closing dnum = %d and bitmap not set !\n", + dptr->dnum )); + } + bitmap_clear(dptr_bmap, dptr->dnum - 1); if (dptr->ptr) { @@ -269,7 +274,7 @@ void dptr_close(int *key) return; } - dptr = dptr_get(*key); + dptr = dptr_get(*key, True); if (!dptr) { DEBUG(0,("Invalid key %d given to dptr_close\n", *key)); @@ -430,7 +435,7 @@ int dptr_create(connection_struct *conn,char *path, BOOL old_handle, BOOL expect dptr->dnum = bitmap_find(dptr_bmap, 0); if(dptr->dnum == -1 || dptr->dnum > 254) { - DEBUG(0,("dptr_create: Error - all old style dirptrs in use ?\n")); + DEBUG(0,("dptr_create: returned %d: Error - all old dirptrs in use ?\n", dptr->dnum)); free((char *)dptr); return -1; } @@ -444,8 +449,8 @@ int dptr_create(connection_struct *conn,char *path, BOOL old_handle, BOOL expect dptr->dnum = bitmap_find(dptr_bmap, 255); - if(dptr->dnum == -1) { - DEBUG(0,("dptr_create: Error - all dirptrs in use ?\n")); + if(dptr->dnum == -1 || dptr->dnum < 255) { + DEBUG(0,("dptr_create: returned %d: Error - all new dirptrs in use ?\n", dptr->dnum)); free((char *)dptr); return -1; } |