- Begin converting init functions to use SMB_THREAD_ONCE. libsmbclient
module-wide initialization is now moved into a separate function and called
via SMB_THREAD_ONCE.
- libsmbclient counts users (contexts) so that it can release global resources
when the last context is closed. That count of contexts is now protected by
a mutex.
Derrell Lipman [Wed, 13 May 2009 18:31:40 +0000 (14:31 -0400)]
Make the thread functions a bit easier to use
- Create separate macros for lock and unlock so that it's easier to identify
which request is being made.
- Initialize *ponce in the SMB_THREAD_ONCE macro in the non-thread-safe case,
rather than requiring each init function to determine if it's in the
non-thread-safe case and manually initialize.
Bo Yang [Tue, 12 May 2009 05:51:25 +0000 (13:51 +0800)]
s3:libsmb: return NT_STATUS_CONNECTION_INVALID if the fd is -1
This way we can destinguish between requests which failed
because the connection broke after they were triggered
and the requests which are started on an already broken
connection.
This also moves the check to cli_smb_req_iov_send()
where it really belongs.
Derrell Lipman [Wed, 13 May 2009 13:49:59 +0000 (09:49 -0400)]
Allow a parameter to smb_thread_once's initialization function
- This should make life easier for ourselves. We're no longer constrained to
the semantics of pthread_once, so let's allow passing a parameter to the
initialization function. Some of Samba's init functions return a
value. Although I haven't searched, I suspect that some of the init
functions require in input parameters. The parameter added here can be used
for input, output, or both, as necessary... or ignored, as is now done in
talloc_stackframe_init().
Derrell Lipman [Wed, 13 May 2009 01:32:33 +0000 (21:32 -0400)]
Fix broken smb_thread_once function (again)
- It would help if smb_thread_once did, eventually, set the variable that
prevents the init function from being run again. Sigh. It must be getting
late.
Derrell Lipman [Wed, 13 May 2009 01:22:23 +0000 (21:22 -0400)]
Fix broken smb_thread_once function
- We can't set *ponce=true before running the function because although other
threads wouldn't re-run the initialization function, they could potentially
proceed beyond the initialization point while the first thread was still
running the initialization function. If a second thread gets to an
SMB_THREAD_ONCE() call while one with the same ponce is running, we need to
ensure that it enters smb_thread_once() to await the mutex and then recheck
whether *ponce is set or not. My original comment about other "once"
functions possibly being called from within this "once" function is
irrelevant since those other ones would have their own unique ponce.
Volker Lendecke [Thu, 12 Mar 2009 16:23:17 +0000 (17:23 +0100)]
Fix bug 6157
This patch picks the alphabetically smallest one of the multi-value attribute
"uid". This fixes a regression against 3.0 and also becomes deterministic.
Günther Deschner [Tue, 12 May 2009 09:41:14 +0000 (11:41 +0200)]
s3-printing: Fix vlp testprinter application.
Jeremy, we cannot just access cache_path() here without calling lp_load and
friends as well as parsing configfile from the commandline in order to make
"make test/selftest" find the correct conffile with path, etc.
I just changed it to pass the target tdbfilename as an argument, ok ?
Michael Adam [Wed, 6 May 2009 00:25:08 +0000 (02:25 +0200)]
s3:loadparm: free the file_list at the start of loadparm
This should reduce the waste of memory when using "config file"
or "config backend". It also reduces the risk of triggering
reloads due to some old unused files being checked.
Jeremy Allison [Tue, 12 May 2009 00:29:48 +0000 (17:29 -0700)]
Hopefully fix the buildfarm. Add some debug level 10 messages
I used to track down the vlp problem, change the vlp test printer
not to use a static path of /tmp/vlp.tdb for the virtual print
database (as this will eventually fill up). Cause it to use
a virtual print database inside the cachepath.
Jeremy.
Derrell Lipman [Mon, 11 May 2009 02:31:37 +0000 (22:31 -0400)]
Provide a libsmbclient interface for programs requiring threads
- This adds two functions: smbc_thread_posix() which provides access to the
internal threading implementation using pthread; and smbc_thread_impl()
where the user provides each of the functions required by Samba, to give
access to the thread implementation's native capabilities.
Derrell Lipman [Mon, 11 May 2009 02:27:54 +0000 (22:27 -0400)]
Don't require external use of internal enum smb_thread_lock_type
- Internally, when locking or unlocking a mutex, we'll pass one of the
values of enum smb_thread_lock_type. That enum is not available to users
providing a thread implementation. Externally, we'll document the integer
values which will be passed to their lock_mutex function, but not require
them to access our internal header file.
Derrell Lipman [Mon, 11 May 2009 01:55:23 +0000 (21:55 -0400)]
Replace external thread "once" with an internal implementation
Jeremy, please check...
- I'm in the process of providing an interface in libsmbclient to the
recently-added threading capabilities. In the process, I discovered that
different thread implementations have varying types for the variable passed
to the thread_impl_once() function. pthreads, for example, uses type
pthread_once_t. Since Samba needs to internally declare these variables, it
would need to know the exact type required by each thread implementation's
function. After considering multiple methods of obtaining an appropriately
sized variable, I decided that for the basic "once" functionality required
by Samba, it would be much simpler to just implement our own "once"
functionality. We don't require cancellation points et all. This commit adds
an smb_thread_once() function that is implemented using an internal
mutex. The mutex itself uses the implementation's create_mutex
function. This eliminates the need for the user to provide a smb_thread_once
function pointer and the entire issue of that function's first parameter.