summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1999-02-05 01:59:08 +0000
committerJeremy Allison <jra@samba.org>1999-02-05 01:59:08 +0000
commit8159f2ae21ec35b8d9d0045d14099062cf51c368 (patch)
treefbf2afd6005f95683b4146124c222f99395ba622
parentf285470006ad0219970f3046fc5c426328b7ebb6 (diff)
downloadsamba-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.
-rw-r--r--source/include/local.h2
-rw-r--r--source/smbd/dir.c29
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;
}