ntdll: Implement TpSetPoolMinThreads.

This commit is contained in:
Sebastian Lackner 2015-07-01 02:56:26 +02:00 committed by Alexandre Julliard
parent d56984a03d
commit 7d9ec31e19
2 changed files with 36 additions and 0 deletions

View File

@ -973,6 +973,7 @@
@ stdcall TpAllocPool(ptr ptr)
@ stdcall TpReleasePool(ptr)
@ stdcall TpSetPoolMaxThreads(ptr long)
@ stdcall TpSetPoolMinThreads(ptr long)
@ stdcall TpSimpleTryPost(ptr ptr ptr)
@ stdcall -ret64 VerSetConditionMask(int64 long long)
@ stdcall WinSqmIsOptedIn()

View File

@ -1480,6 +1480,41 @@ VOID WINAPI TpSetPoolMaxThreads( TP_POOL *pool, DWORD maximum )
RtlLeaveCriticalSection( &this->cs );
}
/***********************************************************************
* TpSetPoolMinThreads (NTDLL.@)
*/
BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum )
{
struct threadpool *this = impl_from_TP_POOL( pool );
NTSTATUS status = STATUS_SUCCESS;
TRACE( "%p %u\n", pool, minimum );
RtlEnterCriticalSection( &this->cs );
while (this->num_workers < minimum)
{
HANDLE thread;
status = RtlCreateUserThread( GetCurrentProcess(), NULL, FALSE, NULL, 0, 0,
threadpool_worker_proc, this, &thread, NULL );
if (status != STATUS_SUCCESS)
break;
interlocked_inc( &this->refcount );
this->num_workers++;
NtClose( thread );
}
if (status == STATUS_SUCCESS)
{
this->min_workers = minimum;
this->max_workers = max( this->min_workers, this->max_workers );
}
RtlLeaveCriticalSection( &this->cs );
return !status;
}
/***********************************************************************
* TpSimpleTryPost (NTDLL.@)
*/