Commit Graph

351 Commits

Author SHA1 Message Date
Pierangelo Masarati
b0d2063d92 client side of draft-wahl-ldap-session 2007-08-21 23:52:03 +00:00
Hallvard Furuseth
2ea3d3f621 Ensure ltp_max_pending >= 0; negative values confused pool_query().
Remove accidentally added #define LDAP_MAX_PENDING from last commit.
2007-07-03 11:34:14 +00:00
Hallvard Furuseth
bc8631183c Remove bogus pause wait near end of pool_wrapper(). Add/fix comments. 2007-07-01 16:44:59 +00:00
Hallvard Furuseth
ed0c9d223a Rename thread contexts to tasks, leaving user contexts the only context.
Remove ldap_int_thread_ctx_t.ltc_next.al (active list) left over from rev 1.75.
2007-06-10 23:58:38 +00:00
Hallvard Furuseth
c60f7c1fd2 For ITS#4943: Axe thread pool semaphore code 2007-06-10 23:37:49 +00:00
Hallvard Furuseth
b327239618 Remove ltp_active_list. It became unneeded when rev 1.24 added thread_keys[].
Tighten loop in pool_pause(): Omit unneeded ltp_pcond signals since rev 1.64.
Fix comment.
2007-06-04 22:18:01 +00:00
Hallvard Furuseth
b3e4305131 Simplify: Remove tid_zero, thread_keys[].id and ldap_int_main_tid.
Not needed after ldap_int_thread_userctx_t.ltu_id was added and
_pool_wrapper took care not to update thread_keys[] during pauses.
Fix bogus thread_keys[].ctx comment.
2007-06-01 15:24:19 +00:00
Hallvard Furuseth
1b890689b1 Add comments. Constify tid_zero. Shut up gcc -Wswitch. if(!tpool)->assert(). 2007-05-31 19:47:38 +00:00
Hallvard Furuseth
1f3e6110b9 Add variable ldap_int_has_thread_pool, assert(at most one pool); 2007-05-31 17:15:54 +00:00
Hallvard Furuseth
1b15fa9c6e In pool_submit():
- Move problematic mutex_unlock()-mutex_lock() into the unused #ifdef
  LDAP_PVT_THREAD_POOL_SEM_LOAD_CONTROL and add a FIXME comment inside.
- Delay ltp_starting--; until pool_wrapper().  Nonzero value could otherwise
  no longer be exposed when !defined LDAP_PVT_THREAD_POOL_SEM_LOAD_CONTROL.
2007-05-31 12:47:24 +00:00
Hallvard Furuseth
45389c0341 Preserve key order when deleting, so context_reset will free last keys first. 2007-05-31 12:08:50 +00:00
Hallvard Furuseth
7c6b26a68f Make get_thread_info() static. Handle ldap_pvt_thread_pool_t = int (not ptr). 2007-05-30 22:20:20 +00:00
Hallvard Furuseth
eb351d9e33 ITS#4972: $LDAP_THREAD_DEBUG, detached threads, debug_already_initialized().
Also plug a memory leak, set state vars even when unused for the sake of
debugging, and tweak some readability issues & data types.
2007-05-18 17:49:38 +00:00
Hallvard Furuseth
6f3cf907b8 Readability patch: ERRVAL() macro for pthreads < 7 vs. >= 7 return values. 2007-05-18 15:28:09 +00:00
Hallvard Furuseth
e509d3ed9a Comment fixes.
Corrected rev 1.67 cvs comment: ltu_key[] is NULL-terminated _when not full_.
2007-05-11 18:48:13 +00:00
Hallvard Furuseth
810b2389dc Since we only have LDAP_MAXTHR thread_keys, allow max LDAP_MAXTHR
threads per pool, even when ltp_max_count <= 0 ("unlimited").
Keep ltp_max_count in range [0, LDAP_MAXTHR].
2007-05-09 23:25:03 +00:00
Hallvard Furuseth
f0a1511422 Make ldap_int_thread_userctx_t.ltu_key[] a proper NULL-terminated array.
(setkey/getkey expected that, but purgekey could set a NULL in the middle.)
Added some checks for input key!=NULL.

API changes, need review - I'm not sure what's indented here:
- setkey(data=NULL, kfree!=NULL) searched as if intended to reset
  the key, but updated by setting the key.  Now always updates.
- setkey(key=<not found>, data=NULL) could return either success or
  failure.  Now succeeds iff (data == NULL && kfree == NULL).
2007-05-09 22:59:04 +00:00
Hallvard Furuseth
f5da908c49 thread_keys is a (poor) open-addessed hash table, but it lacked a
"deleted item" mark.  Add DELETED_THREAD_CTX.
Also improve the hash function a bit, and make the hash unsigned.
2007-05-09 22:22:44 +00:00
Hallvard Furuseth
8a92825225 Protect thread_keys[] with ldap_pvt_thread_pool_mutex, except in
ldap_pvt_thread_pool_purgekey() which may only be called during pauses.

Thus, also wait for pauses to finish before accessing thread_keys in
ldap_int_thread_pool_wrapper().  This may prevent pending tasks from
being started when a pause had been requested, which seems to have been
possible.  If that was a feature, we can split ltp_pause==1 in 2 states:
in pause (causes wait), and pause requested.

Also move 'thread_keys[].id = <thread id>' from pool_submit to
pool_wrapper.  Until pool_wrapper set the ctx as well, thread context
lookup would just return NULL anyway.
2007-05-09 21:38:28 +00:00
Hallvard Furuseth
92afeb8ef7 Replace state LDAP_INT_THREAD_POOL_PAUSING with member ltp_pause,
so a pause will work during states FINISHING and STOPPING.

Add missing waits and signals, and move waits in pool_wrapper().
Replace if(test) with while(test) when waiting for the multi-purpose
condition variable ltp_cond.
2007-05-09 19:53:25 +00:00
Hallvard Furuseth
9e9bf22a64 ITS#4943:
In ldap_pvt_thread_pool_submit(), when backing out of thread creation:
  ltp_pending_count '++' -> '--'.  Signal if there are no more threads.
In ldap_int_thread_pool_wrapper():
  if() -> assert() where false would result in eternal loop.
2007-05-09 19:34:49 +00:00
Hallvard Furuseth
bb890724d4 Don't complain if detached threads exit after ldap_debug_thread_destroy(). 2007-05-09 19:21:08 +00:00
Hallvard Furuseth
bbc719ca56 ITS#4948: '#if <undefined macro>' -> '#ifdef' warning cleanup 2007-05-09 18:17:10 +00:00
Howard Chu
28493e554c ITS#4912 fix typo in prev commit 2007-04-05 00:16:17 +00:00
Howard Chu
c80d5f970a ITS#4899 fix for keys not getting cleared 2007-04-01 11:52:51 +00:00
Howard Chu
f97f109483 Fix prev commit again 2007-01-28 02:12:29 +00:00
Howard Chu
99a8deb160 ITS#4821 partially revert prev patch 2007-01-27 18:40:02 +00:00
Howard Chu
977bd839cc Calling setkey() with NULL data and kfree should erase the key. 2007-01-25 11:53:09 +00:00
Howard Chu
2298595ea3 Free thread keys in reverse order of allocation 2007-01-25 11:13:15 +00:00
Pierangelo Masarati
7ee7699bb9 more on ITS#4799 2007-01-10 01:18:52 +00:00
Pierangelo Masarati
5513ac6335 import of LDAP Sync client API 2007-01-06 18:28:32 +00:00
Kurt Zeilenga
da6d9eb046 happy new year 2007-01-02 20:00:42 +00:00
Pierangelo Masarati
5ee5709993 fix build without threads (ITS#4721) 2006-10-26 22:03:12 +00:00
Pierangelo Masarati
67f3fd8078 monitor __ALL__ thread parameters 2006-09-14 18:55:02 +00:00
Howard Chu
deea7b5530 MSVC compatibility 2006-09-14 08:06:49 +00:00
Pierangelo Masarati
af1f87b96d ldap_pvt_runqueue_next_sched() may return a pointer to data that's freed by task run earlier (ITS#4517) 2006-05-02 20:32:37 +00:00
Howard Chu
f269301ab9 Add ldap_pvt_thread_pool_tid() 2006-05-02 00:56:42 +00:00
Hallvard Furuseth
dc5c8409f6 Add missing "static" to last commit 2006-05-01 15:23:16 +00:00
Hallvard Furuseth
19b3812643 Introduce ldap_debug_thread_wrapper() to notice threads that exit by returning 2006-04-30 01:15:57 +00:00
Howard Chu
5b8a74590b Fix tpool_shutdown, don't remove pool from list since pool_destroy
already does it.
2006-04-29 22:31:58 +00:00
Howard Chu
7026d5219f Fix adjust_count, missing break 2006-04-29 22:31:33 +00:00
Howard Chu
e1ec64aaee rmutex_lock etc.: caller supplies thread id 2006-04-28 21:39:38 +00:00
Howard Chu
0a7808fbad Added recursive mutex implementation 2006-04-28 20:12:45 +00:00
Hallvard Furuseth
b70d6dd8e6 LDAP_RDWR_DEBUG update:
- Avoid buffer overrun when too many readers.
- When remoinv reader ID, move one ID instead of all later IDs in array.
- assert(correct lock owner) before unlocking a write lock.
2006-04-05 20:08:34 +00:00
Hallvard Furuseth
ca4a4456e8 LDAP_THREAD_DEBUG revamping, cleanup, bug fixes.
Expand usage struct with magic numbers and state info.
Add options "noreinit", "nosync", "nomem", "threadID".  Remove "dupinit".
Detect address changes.  Turn off thread ID tracking by default.
2006-04-05 19:52:07 +00:00
Hallvard Furuseth
7057f8756c thr_yield() returns void, so do not use its "return value" (ITS#4469) 2006-04-03 17:10:38 +00:00
Hallvard Furuseth
7a113f0759 Restore $LDAP_THREAD_DEBUG=off functionality (was lost in last patch). 2006-04-03 12:49:30 +00:00
Hallvard Furuseth
da0c0360e4 Warnings: Unused vars. funcptr=0, not =NULL. if(b=...) -> if((b=...) != NULL). 2006-04-02 19:54:24 +00:00
Pierangelo Masarati
cad751250e allow mutex ownership detection (thanks to Hallvard) 2006-04-01 19:00:37 +00:00
Hallvard Furuseth
9313508035 Expand and clarify thr_debug documentation. 2006-04-01 18:31:38 +00:00
Howard Chu
de36ebd08c cleanup NULL deref 2006-03-31 21:20:36 +00:00
Kurt Zeilenga
825ce79611 Initial and rough client-side implementation of the revised LDAP
Transactions specification.  A work in progress!  Comments welcomed.
2006-03-06 21:20:36 +00:00
Howard Chu
9870eba3ee ITS#4368 unlock pool ltp_mutex before destroying it 2006-01-24 23:31:56 +00:00
Howard Chu
84315e96f8 ITS#4349 don't wait on condition if there are no threads in the pool. 2006-01-18 01:55:24 +00:00
Howard Chu
7f5ea4c098 Get rid of trivial yield, for completeness' sake. 2006-01-15 14:34:44 +00:00
Howard Chu
78a9d66e53 ITS#3950 delete gratuitous yield. (could use pthread_cond_timedwait
if we ever wanted to time out idle threads.)
2006-01-15 14:21:16 +00:00
Pierangelo Masarati
c5c5ba0b32 s/o/lo/ 2006-01-09 21:02:52 +00:00
Kurt Zeilenga
eccd913a07 Update variables holding protocol values to ber_*_t's
Remove old grouping/txn code (pending redesign)
2006-01-09 01:25:53 +00:00
Pierangelo Masarati
de79a7bfec rework API functions to create/parse controls; add client API functions to handle RFC2696 paged results (ITS#4314; patch from Hans Leidekker with changes) 2006-01-08 22:03:30 +00:00
Pierangelo Masarati
339b9c371e rfc2589 support (ITS#4293) 2006-01-06 17:46:52 +00:00
Howard Chu
d1693d4a07 ITS#3950 tweak prev commit, s/REPLACE_SCHED_YIELD/REPLACE_BROKEN_YIELD/ 2006-01-06 06:07:36 +00:00
Kurt Zeilenga
f5fd375d38 i before e and other cleanup 2006-01-06 05:50:51 +00:00
Kurt Zeilenga
21d15546d3 Make use of nanosleep/select as a sched_yeild(2) replacement
conditional on REPLACE_SCHED_YEILD.   Configure support
needed.
2006-01-06 05:22:35 +00:00
Howard Chu
69179a5c44 ITS#3950 use select instead of yield when select does the right thing. 2006-01-06 01:02:00 +00:00
Kurt Zeilenga
acbb5cf689 Happy new year! 2006-01-03 23:11:52 +00:00
Howard Chu
f80e9d11fa Fix prev commit, spawns unnecessary threads. 2005-10-28 10:31:21 +00:00
Howard Chu
71514ffb92 Fix pool_submit, create threads as long as we're under the max count. 2005-10-27 21:55:18 +00:00
Pierangelo Masarati
d277c5b3d6 silence SLAP_SEM_LOAD_CONTROL related warnings... 2005-10-16 08:58:06 +00:00
Kurt Zeilenga
533394d641 disable SLAP_SEM_LOAD_CONTROL by default, needs additional review/work
Misc. other cleanup
2005-10-16 00:17:58 +00:00
Kurt Zeilenga
6db7e605ee Align Operation buffers using LBER_ALIGNED_BUFFER 2005-10-12 23:17:28 +00:00
Hallvard Furuseth
123948bd5e Add thread debugging wrapper thr_debug.c and ldap_thr_debug.h in libldap_r/,
enabled with LDAP_THREAD_DEBUG (cpp macro and environment variable):

Move any ldap_pvt_* definitions from ldap_int_thread.h to ldap_pvt_thread.h.
#define ldap_int_thread_equal/ldap_pvt_thread_equal instead of tpool.c:TID_EQ.
Define some ldap_debug_*_t types, and LDAP_UINTPTR_T, in ldap_int_thread.h.
ldap_int_thread.h/ldap_pvt_thread.h can now be included multiple times, giving
different results depending on whether libldap_r/ldap_thr_debug.h was included.
Add some cleanup and some preprocessor hacks.
#define LDAP_THREAD*_IMPLEMENTATION in libldap_r/*.c, used by ldap_thr_debug.h.
Add PTHREAD_MUTEX_ERRORCHECK/PTHREAD_MUTEX_ERRORCHECK_NP in thr_posix.c.
2005-09-17 23:28:08 +00:00
Howard Chu
6be50f1b0f ITS#4006 add stub for ldap_pvt_thread_pool_context_reset() 2005-09-06 22:11:26 +00:00
Pierangelo Masarati
6aa5b4f775 address ITS#3925; please test 2005-09-01 01:59:36 +00:00
Pierangelo Masarati
fe4b006e17 wait also if PAUSING; silence warnings and improve readability with gdb 2005-09-01 01:54:00 +00:00
Howard Chu
1f78e2b831 ITS#3961 better fix - provide a context for the main thread. The context
must be reset by the caller to clear out temp allocations etc.
2005-08-23 04:12:57 +00:00
Howard Chu
468112e2ba ITS#3961 provide ldap_pvt_thread_pool_fake_context_init/destroy, don't
use arbitrary context pointers.
2005-08-23 03:25:21 +00:00
Howard Chu
6754d025f2 ITS#3847 silence warnings 2005-07-11 10:39:32 +00:00
Hallvard Furuseth
a20b19cc9e ISO C chokes on comma at end of enum list 2005-07-06 08:13:50 +00:00
Howard Chu
5f46aa4d3b ITS#3760 add missing NO_THREADS stubs 2005-06-03 22:08:31 +00:00
Kurt Zeilenga
be097fc8cd Add ldap_turn(3) and ldap_turn_s(3). 2005-05-04 20:24:48 +00:00
Howard Chu
2d06c4fe2d Freshly inserted tasks should be at head of queue and run immediately 2005-04-23 16:56:37 +00:00
Howard Chu
b978e77932 Add task names to runqueue entries 2005-04-23 00:27:57 +00:00
Howard Chu
3f20324ed0 Add ldap_pvt_thread_pool_purgekey to free all instances of key across
all threads.
2005-04-22 22:27:29 +00:00
Howard Chu
2dec29f265 Change ldap_pvt_runqueue_insert to return new task pointer 2005-04-22 14:37:59 +00:00
Howard Chu
dd646eb734 Added ldap_pvt_runqueue_find() 2005-04-19 14:40:30 +00:00
Howard Chu
5608206da2 Fix LDAP_PVT_THREAD_STACK_SIZE, automatically scale up on 64 bit machines 2005-04-15 06:18:18 +00:00
Howard Chu
1b777e0ab3 Added ldap_pvt_thread_pool_pause/resume 2005-03-07 21:02:31 +00:00
Kurt Zeilenga
dc0eacd40b Happy New Year! 2005-01-01 20:49:32 +00:00
Kurt Zeilenga
e0a9ea2f50 Move MSVC port to the Attic 2004-09-04 04:37:41 +00:00
Howard Chu
0305199518 Additional debug tracking... 2004-07-03 16:25:30 +00:00
Jong Hyuk Choi
a1308f8dfa syncrepl retry code fix for correct timing 2004-06-21 07:03:49 +00:00
Jong Hyuk Choi
763f8c76ee syncrepl retry-on-error code 2004-06-18 05:04:03 +00:00
Howard Chu
cee3acea09 Fix prev commit 2004-03-17 09:59:03 +00:00
Howard Chu
650837742a Restore NT4 compatibility, avoid W2K-only API 2004-03-17 05:06:04 +00:00
Pierangelo Masarati
c9fae6c942 fix file name 2004-03-16 18:02:38 +00:00
Kurt Zeilenga
647df2b9cb Start of client-side LDAP tranactions (non-working)
and lots of cleanup (hence the commit)
(ldapmodify will need much more work for transactions)
2004-03-14 23:32:00 +00:00
Howard Chu
3810fa18d8 Added PasswordPolicy control 2004-03-12 21:22:32 +00:00
Howard Chu
f3f78e8a1f ITS#2997 change MAXTHREADS to LDAP_MAXTHR 2004-03-04 15:35:29 +00:00
Howard Chu
a6b1dfd1c8 Fix ldap_pvt_thread_self, GetCurrentThread() returns a constant, not a
unique value.
2004-01-15 09:59:11 +00:00
Kurt Zeilenga
3c598e89fb Happy new year 2004-01-01 19:15:16 +00:00