Commit Graph

63 Commits

Author SHA1 Message Date
Sebastian Lackner 381c034be3 ntdll: Wait_thread_proc should not terminate on user APC.
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-09 20:56:27 +09:00
Francois Gouget e0e2ee3487 ntdll: Add a trailing '\n' to a FIXME() trace. 2015-08-07 23:50:20 +09:00
Sebastian Lackner 5bd9d58016 ntdll: Mark newly spawned worker threads as busy. 2015-07-29 22:23:56 +02:00
Sebastian Lackner 9562e81810 ntdll: Reimplement RtlQueueWorkItem on top of new threadpool API. 2015-07-28 09:54:18 +02:00
Sebastian Lackner b687fee66f ntdll: Fix incorrect assignment in assert statement (Coverity). 2015-07-13 14:44:40 +09:00
Sebastian Lackner f65f645c3f ntdll: Add missing calls to RtlExitUserThread. 2015-07-08 16:02:24 +09:00
Sebastian Lackner 0021569778 ntdll: Try to merge threadpool wait queue buckets if possible.
When the number of elements per bucket is too small, then try to reduce
the number of threads by merging buckets. This is to ensure that the
number of running wait queue threads doesn't get too big.
2015-07-06 14:49:39 +09:00
Sebastian Lackner 185247576b ntdll: Implement TpSetWait and TpWaitForWait. 2015-07-06 14:49:39 +09:00
Sebastian Lackner f1be5dcac0 ntdll: Implement threadpool wait queues.
To implement waiting for an arbitrary number of handles, we group them
in buckets up to (MAXIMUM_WAIT_OBJECTS - 1) objects, and then assign a
dedicated wait queue thread. The last handle is used to notify about
changes.
2015-07-06 14:49:38 +09:00
Sebastian Lackner 4523a54c62 ntdll: Implement TpAllocWait and TpReleaseWait. 2015-07-06 14:34:20 +09:00
Sebastian Lackner cb2aae1af8 ntdll: Implement threadpool timer queues. 2015-07-03 13:06:41 +09:00
Sebastian Lackner bd7cb07358 ntdll: Implement TpAllocTimer and TpReleaseTimer. 2015-07-03 13:06:31 +09:00
Sebastian Lackner 775d3dcecb ntdll: Implement TpDisassociateCallback and add a separate group completion event. 2015-07-03 13:06:15 +09:00
Sebastian Lackner 8965511957 ntdll: Implement TpCallbackUnloadDllOnCompletion. 2015-07-02 14:54:13 +09:00
Sebastian Lackner 15110b1770 ntdll: Implement TpCallbackSetEventOnCompletion. 2015-07-02 14:54:04 +09:00
Sebastian Lackner eb39cb1323 ntdll: Implement TpCallbackReleaseSemaphoreOnCompletion. 2015-07-02 14:53:50 +09:00
Sebastian Lackner 02ee5bb52d ntdll: Implement TpCallbackReleaseMutexOnCompletion.
Various internal details about the order and error handling of completion
actions are documented in "Concurrent Programming on Windows" by Joe Duffy.
2015-07-02 14:53:41 +09:00
Sebastian Lackner a9dd37be68 ntdll: Implement TpCallbackLeaveCriticalSectionOnCompletion.
An instance can only have one completion of each type, trying to add a
second one leads to an exception on Windows.
2015-07-02 14:53:21 +09:00
Sebastian Lackner eb974bcd7a ntdll: Implement instance objects and the TpCallbackMayRunLong function.
The instance is marked as long-running even if TpCallbackMayRunLong fails,
a second call will lead to an exception on Windows.
2015-07-02 14:53:02 +09:00
Sebastian Lackner 8fc2430c2a ntdll: Implement threadpool RaceDll environment variable. 2015-07-02 14:52:44 +09:00
Sebastian Lackner fa114f122b ntdll: Add support for threadpool finalization callback. 2015-07-02 14:52:38 +09:00
Sebastian Lackner 1839ce8697 ntdll: Add support for threadpool group cancel callback. 2015-07-02 14:52:27 +09:00
Sebastian Lackner e4c38f6bad ntdll: Implement threadpool work item functions. 2015-07-01 19:18:15 +09:00
Sebastian Lackner 68d92bceed ntdll: Implement threadpool cleanup group functions. 2015-07-01 19:18:14 +09:00
Sebastian Lackner 7d9ec31e19 ntdll: Implement TpSetPoolMinThreads. 2015-07-01 19:18:14 +09:00
Sebastian Lackner d56984a03d ntdll: Implement TpSetPoolMaxThreads. 2015-07-01 19:18:13 +09:00
Sebastian Lackner db9fc9141e ntdll: Implement TpSimpleTryPost and basic threadpool infrastructure. 2015-07-01 19:18:13 +09:00
Sebastian Lackner 41b24f2168 ntdll: Move all structs and definitions to the beginning in threadpool.c. 2015-03-17 14:52:07 +09:00
Sebastian Lackner ae309c2d00 ntdll: Move static threadpool variables into a struct. 2015-03-10 15:33:20 +09:00
Nikolay Sivov 7b7d8374a4 ntdll: NtWaitForMultipleObjects()'s third arguments means 'wait_any', not 'wait_all'. 2014-09-01 13:03:07 +02:00
Sebastian Lackner 7ba4d119c1 ntdll: Use condition variable for RtlQueueWorkItem implementation. 2014-03-12 10:41:26 +01:00
Sebastian Lackner 9277fcfdb4 ntdll: Fix possible race-condition in iocp poller code. 2014-03-11 19:39:29 +01:00
Sebastian Lackner 23adc9aaed ntdll: Fix incorrect value passed to RtlDeleteTimerQueueEx. 2014-01-30 10:35:53 +01:00
Alexandre Julliard 2810c5647f ntdll: Add a magic number to validate timer queue pointers. 2013-08-20 20:13:58 +02:00
Jörg Höhle 2f0b93ca13 ntdll: Stabilize CreateTimerQueueTimer callbacks over time. 2013-02-19 19:50:54 +01:00
Jörg Höhle 4f6db78ca0 ntdll: Use the monotonic time counter also for timer queues. 2013-02-07 15:54:34 +01:00
Jörg Höhle 602807c2a5 ntdll: Do not execute callbacks past DeleteTimer(INVALID_HANDLE_VALUE). 2012-10-31 18:08:02 +01:00
Michael Stefaniuc abef6ab366 ntdll: Avoid TRUE:FALSE conditional expressions. 2012-08-14 11:58:40 +02:00
Francois Gouget fac36c55e9 Assorted typo, spelling, wording and case fixes. 2012-05-15 16:26:43 +02:00
Jörg Höhle bcd2d0ec5b ntdll: Use list_empty() instead of list_count() == 0. 2011-06-16 11:57:25 +02:00
Vitaliy Margolen aafa74908b ntdll: Mask invalid flags for RtlQueueWorkItem. 2010-11-11 18:12:47 +01:00
Alexandre Julliard 3b67ad9bd4 ntdll: Fix the NtCreateEvent prototype.
It takes an event type, not a manual reset flag.
2010-01-18 20:34:54 +01:00
Alexandre Julliard 82ebebc671 ntdll: Use INT_MAX for the semaphore count since LONG_MAX won't work on 64-bit. 2008-12-31 21:55:11 +01:00
Jeff Zaroyko 6c597bac2e ntdll: Avoid NULL deref in RtlDeleteTimer. 2008-12-01 14:22:12 +01:00
Gerald Pfeifer e375b0c4a2 Add return statements to avoid gcc warnings. 2008-08-20 12:53:22 +02:00
Dan Hipschman a148e190af ntdll: Add support for a default timer queue. 2008-07-30 12:44:25 +02:00
Dan Hipschman 2b287a4489 ntdll: Fix a small timer-queue bug whereby a deleted timer may still expire. 2008-07-28 11:32:21 +02:00
Dan Hipschman 4c64d0cdfa ntdll: Implement RtlDeleteTimer for kernel32's DeleteTimerQueueTimer. 2008-07-25 14:09:15 +02:00
Dan Hipschman 396e47ef5c ntdll: Implement RtlUpdateTimer for kernel32's ChangeTimerQueueTimer. 2008-07-25 14:09:15 +02:00
Dan Hipschman 5ef54c4cec ntdll: Implement the timer queue thread. 2008-07-25 14:09:15 +02:00