[Samba] Dangling MS Access DB Lock Files *.ldb

Jeremy Allison jra at samba.org
Mon Oct 10 16:32:51 GMT 2005


On Mon, Oct 10, 2005 at 04:21:15PM +0100, Dragan Krnic wrote:
> I have an intermittent problem with dangling MS Access DB lock files.
> 
> In a productive environment with N batch queus (each on a separate
> Windows XP Professional) a scheduler PC dispatches the work load to
> a free queue by means of modifying a simple MS Access DB file 
> called "PRIM.mdb", which resides on a Samba 3.0.20 share. Each free
> queue PC polls the same MS Access DB file every 60 seconds to see
> if there is a work packet to be executed by it. If there is a work
> package for it it modifies a state value of the respective work packet 
> in this DB when it starts executing it as well as after the job has 
> been done so that the scheduler knows what's going on.

There's a bug in 3.0.20 that might affect this (btw it's also in
3.0.20a). I know about it because it's my fault :-(.

Here's the patch for 3.0.20, and 3.0.20a.

Jeremy.
-------------- next part --------------
--- smbd/open.c	2005-07-28 06:19:42.000000000 -0700
+++ smbd/open.c.new	2005-10-10 09:32:25.000000000 -0700
@@ -1585,13 +1585,6 @@
 
 	fsp_open = open_file(fsp,conn,fname,psbuf,flags|flags2,unx_mode,access_mask);
 
-	if (!fsp_open && (flags == O_RDWR) && (errno != ENOENT)) {
-		if((fsp_open = open_file(fsp,conn,fname,psbuf,
-					 O_RDONLY,unx_mode,access_mask)) == True) {
-			flags = O_RDONLY;
-		}
-	}
-
 	if (!fsp_open) {
 		if(file_existed) {
 			unlock_share_entry(conn, dev, inode);
-------------- next part --------------
--- smbd/open.c	2005-09-29 14:52:40.000000000 -0700
+++ smbd/open.c.new	2005-10-06 21:45:37.000000000 -0700
@@ -1585,22 +1585,6 @@
 
 	fsp_open = open_file(fsp,conn,fname,psbuf,flags|flags2,unx_mode,access_mask);
 
-	if (!fsp_open && (flags2 & O_EXCL) && (errno == EEXIST)) {
-		/*
-		 * Two smbd's tried to open exclusively, but only one of them
-		 * succeeded.
-		 */
-		file_free(fsp);
-		return NULL;
-	}
-
-	if (!fsp_open && (flags == O_RDWR) && (errno != ENOENT)) {
-		if((fsp_open = open_file(fsp,conn,fname,psbuf,
-					 O_RDONLY,unx_mode,access_mask)) == True) {
-			flags = O_RDONLY;
-		}
-	}
-
 	if (!fsp_open) {
 		if(file_existed) {
 			unlock_share_entry(conn, dev, inode);


More information about the samba mailing list