Removed unneeded variable, added comment on deadlock prevention.
authorJeremy Allison <jra@samba.org>
Wed, 19 Sep 2001 07:06:34 +0000 (07:06 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 19 Sep 2001 07:06:34 +0000 (07:06 +0000)
Jeremy.
(This used to be commit 3f52632ac9c45c66613c3a2fd41f1ba73ca3fefc)

source3/smbd/connection.c

index 0f0697b1c73309dc3c94c5569817194d419a2a79..e1b2bc071ae7e8aa939dfe3ab5df4505302cbc1e 100644 (file)
@@ -115,7 +115,6 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
        struct connections_key key;
        struct connections_data crec;
        TDB_DATA kbuf, dbuf;
-       BOOL ret = True;
 
        if (!tdb) {
                tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
@@ -136,18 +135,21 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
                cs.name = lp_servicename(SNUM(conn));
                cs.Clear = Clear;
 
+               /*
+                * This has a race condition, but locking the chain before hand is worse
+                * as it leads to deadlock.
+                */
+
                if (tdb_traverse(tdb, count_fn, &cs) == -1) {
                        DEBUG(0,("claim_connection: traverse of connections.tdb failed with error %s.\n",
                                tdb_errorstr(tdb) ));
-                       ret = False;
-                       goto out;
+                       return False;
                }
 
                if (cs.curr_connections >= max_connections) {
                        DEBUG(1,("claim_connection: Max connections (%d) exceeded for %s\n",
                                max_connections, name ));
-                       ret = False;
-                       goto out;
+                       return False;
                }
        }
 
@@ -183,10 +185,8 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
        if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) {
                DEBUG(0,("claim_connection: tdb_store failed with error %s.\n",
                        tdb_errorstr(tdb) ));
-               ret = False;
+               return False;
        }
 
-  out:
-
-       return ret;
+       return True;
 }