From a9c00f35f9d7d59b36c286abb2e72613b32ba775 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 4 Nov 2004 02:19:25 +0000 Subject: r3518: fixed some includes to be consistent. - use #include for operating system includes - use includes relative to include/ for things like system/wait.h also fixed the thread backend to work somewhat. To fix it properly we need to do this: - add a configure test for support for thread local storage (the __thread keyword) - refuse to do pthreads if tls doesn't work - refuse to do pthreads if seteuid() affects process instead of thread - defined THREAD_LOCAL as __thread when WITH_PTHREADS - add THREAD_LOCAL to all the global data structures that should be thread local (there are quite a few) right now the thread backend falls over when you hit it with several connections at once, due to the lack of __thread on some critical structures. (This used to be commit 0dc1deabd0b53bc7a6f6cee2ed99e2cbbe422262) --- source4/lib/getsmbpass.c | 4 ++-- source4/smb_server/smb_server.c | 17 ++++------------- source4/smbd/process_thread.c | 16 ++++++---------- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/source4/lib/getsmbpass.c b/source4/lib/getsmbpass.c index 0d8f4a4b7e..4ffcde8dfd 100644 --- a/source4/lib/getsmbpass.c +++ b/source4/lib/getsmbpass.c @@ -19,8 +19,8 @@ Cambridge, MA 02139, USA. */ /* Modified to use with samba by Jeremy Allison, 8th July 1995. */ #include "includes.h" -#include "include/system/terminal.h" -#include "include/system/wait.h" +#include "system/terminal.h" +#include "system/wait.h" #ifdef REPLACE_GETPASS diff --git a/source4/smb_server/smb_server.c b/source4/smb_server/smb_server.c index 861186a8d7..3c17abe6fb 100644 --- a/source4/smb_server/smb_server.c +++ b/source4/smb_server/smb_server.c @@ -173,7 +173,6 @@ static NTSTATUS receive_smb_request(struct smbsrv_connection *smb_conn) These flags determine some of the permissions required to do an operation */ #define AS_USER (1<<0) -#define USE_MUTEX (1<<1) /* define a list of possible SMB messages and their corresponding @@ -299,12 +298,12 @@ static const struct smb_message_struct /* 0x6d */ { NULL, NULL, 0 }, /* 0x6e */ { NULL, NULL, 0 }, /* 0x6f */ { NULL, NULL, 0 }, -/* 0x70 */ { "SMBtcon",reply_tcon,USE_MUTEX}, +/* 0x70 */ { "SMBtcon",reply_tcon,0}, /* 0x71 */ { "SMBtdis",reply_tdis,0}, -/* 0x72 */ { "SMBnegprot",reply_negprot,USE_MUTEX}, -/* 0x73 */ { "SMBsesssetupX",reply_sesssetup,USE_MUTEX}, +/* 0x72 */ { "SMBnegprot",reply_negprot,0}, +/* 0x73 */ { "SMBsesssetupX",reply_sesssetup,0}, /* 0x74 */ { "SMBulogoffX", reply_ulogoffX, 0}, /* ulogoff doesn't give a valid TID */ -/* 0x75 */ { "SMBtconX",reply_tcon_and_X,USE_MUTEX}, +/* 0x75 */ { "SMBtconX",reply_tcon_and_X,0}, /* 0x76 */ { NULL, NULL, 0 }, /* 0x77 */ { NULL, NULL, 0 }, /* 0x78 */ { NULL, NULL, 0 }, @@ -520,15 +519,7 @@ static void switch_message(int type, struct smbsrv_request *req) return; } - /* THREAD TESTING: use mutex to serialize calls to critical - functions with global state */ - if (flags & USE_MUTEX) { - MUTEX_LOCK_BY_ID(MUTEX_SMBD); - } smb_messages[type].fn(req); - if (flags & USE_MUTEX) { - MUTEX_UNLOCK_BY_ID(MUTEX_SMBD); - } } diff --git a/source4/smbd/process_thread.c b/source4/smbd/process_thread.c index da3af9202a..0eead7f33c 100644 --- a/source4/smbd/process_thread.c +++ b/source4/smbd/process_thread.c @@ -21,15 +21,15 @@ */ #include "includes.h" +#include +#ifdef HAVE_BACKTRACE +#include +#endif +#include "system/wait.h" #include "events.h" #include "dlinklist.h" #include "smb_server/smb_server.h" #include "process_model.h" -#include "include/system/wait.h" -#include "pthread.h" -#ifdef HAVE_BACKTRACE -#include "execinfo.h" -#endif static void *thread_connection_fn(void *thread_parm) { @@ -65,8 +65,6 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event * /* accept an incoming connection. */ status = socket_accept(server_socket->socket, &sock); if (!NT_STATUS_IS_OK(status)) { - DEBUG(0,("accept_connection_single: accept: %s\n", - nt_errstr(status))); return; } @@ -79,14 +77,12 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event * ev = event_context_init(server_socket); if (!ev) { - DEBUG(0,("thread_accept_connection: failed to create event_context!\n")); socket_destroy(sock); return; } conn = server_setup_connection(ev, server_socket, sock, t, pthread_self()); if (!conn) { - DEBUG(0,("server_setup_connection(ev, server_socket, sock, t) failed\n")); event_context_destroy(ev); socket_destroy(sock); return; @@ -120,7 +116,7 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event * /* called when a SMB connection goes down */ static void thread_terminate_connection(struct server_connection *conn, const char *reason) { - DEBUG(0,("thread_terminate_connection: reason[%s]\n",reason)); + DEBUG(10,("thread_terminate_connection: reason[%s]\n",reason)); if (conn) { talloc_free(conn); -- cgit