From 79a9902d39859e0b0dc9d375ffc7714faf00bbb1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 19 Sep 2001 07:06:34 +0000 Subject: Removed unneeded variable, added comment on deadlock prevention. Jeremy. (This used to be commit 3f52632ac9c45c66613c3a2fd41f1ba73ca3fefc) --- source3/smbd/connection.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'source3') diff --git a/source3/smbd/connection.c b/source3/smbd/connection.c index 0f0697b1c7..e1b2bc071a 100644 --- a/source3/smbd/connection.c +++ b/source3/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; } -- cgit