From dbf03959244c392073281c10badd2095397ad2f2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 29 Oct 2004 07:29:26 +0000 Subject: r3357: removed the need to use TDB_CLEAR_IF_FIRST in Samba4. We found a few months ago that TDB_CLEAR_IF_FIRST is extremely inefficient for large numbers of connections, due to a fundamental limitation in the way posix byte range locking is implemented. Rather than the nasty workaround we had for Samba3, we now have a single "cleanup tmp files" function that runs when smbd starts. That deletes the tmp tdbs, so TDB_CLEAR_IF_FIRST is not needed at all. (This used to be commit ffa285bc783c775a2d53a58fb691ca339e6c76ae) --- source4/smbd/service.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'source4/smbd/service.c') diff --git a/source4/smbd/service.c b/source4/smbd/service.c index ca5f5e7531..33c0d5fcbd 100644 --- a/source4/smbd/service.c +++ b/source4/smbd/service.c @@ -349,3 +349,33 @@ void service_close_listening_sockets(struct server_context *srv_ctx) } } } + + +/* + cleanup temporary files. This is the new alternative to + TDB_CLEAR_IF_FIRST. Unfortunately TDB_CLEAR_IF_FIRST is not + efficient on unix systems due to the lack of scaling of the byte + range locking system. So instead of putting the burden on tdb to + cleanup tmp files, this function deletes them. You need to expand + the list here as appropriate. +*/ +void service_cleanup_tmp_files(void) +{ + const char *list[] = { + "openfiles.tdb", + "brlock.tdb", + "unexpected.tdb"}; + int i; + for (i=0;i