removed anti-race code that could cause a classic ABBA deadlock
authorAndrew Tridgell <tridge@samba.org>
Wed, 19 Sep 2001 06:46:35 +0000 (06:46 +0000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 19 Sep 2001 06:46:35 +0000 (06:46 +0000)
I'd rather get the connection count wrong with a small probability
than deadlock
(This used to be commit d4e4e81328a63d6e3396306d5dae6cc45ddd35d7)

source3/smbd/connection.c

index 399851302c7d67e4a4b76ca0992bd67d7126cecf..0f0697b1c73309dc3c94c5569817194d419a2a79 100644 (file)
@@ -114,8 +114,7 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
 {
        struct connections_key key;
        struct connections_data crec;
-       TDB_DATA kbuf, dbuf, lockkey;
-       BOOL rec_locked = False;
+       TDB_DATA kbuf, dbuf;
        BOOL ret = True;
 
        if (!tdb) {
@@ -137,22 +136,6 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
                cs.name = lp_servicename(SNUM(conn));
                cs.Clear = Clear;
 
-               lockkey.dptr = cs.name;
-               lockkey.dsize = strlen(cs.name)+1;
-
-               /*
-                * Go through and count the connections with hash chain representing the service name
-                * locked. This is slow but removes race conditions. JRA.
-                */
-
-               if (tdb_chainlock(tdb, lockkey)) {
-                       DEBUG(0,("claim_connection: tdb_chainlock failed %s\n",
-                               tdb_errorstr(tdb) ));
-                       return False;
-               }
-
-               rec_locked = True;
-
                if (tdb_traverse(tdb, count_fn, &cs) == -1) {
                        DEBUG(0,("claim_connection: traverse of connections.tdb failed with error %s.\n",
                                tdb_errorstr(tdb) ));
@@ -205,8 +188,5 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
 
   out:
 
-       if (rec_locked)
-               tdb_chainunlock(tdb, lockkey);
-
        return ret;
 }