diff options
author | Jeremy Allison <jra@samba.org> | 2001-09-19 07:06:34 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-09-19 07:06:34 +0000 |
commit | 3f52632ac9c45c66613c3a2fd41f1ba73ca3fefc (patch) | |
tree | 6cd18517914ae5bda301408eeb7d31841eebd5bc /source | |
parent | a3267551d88dffb226e4a1c3852fe9c817517d02 (diff) | |
download | samba-3f52632ac9c45c66613c3a2fd41f1ba73ca3fefc.tar.gz samba-3f52632ac9c45c66613c3a2fd41f1ba73ca3fefc.tar.xz samba-3f52632ac9c45c66613c3a2fd41f1ba73ca3fefc.zip |
Removed unneeded variable, added comment on deadlock prevention.
Jeremy.
Diffstat (limited to 'source')
-rw-r--r-- | source/smbd/connection.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/source/smbd/connection.c b/source/smbd/connection.c index 0f0697b1c73..e1b2bc071ae 100644 --- a/source/smbd/connection.c +++ b/source/smbd/connection.c @@ -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; } |