c-pal/win32/devdoc/execution_engine_win32.md

4.3 KiB

execution_engine_win32 requirements

Overview

execution_engine_win32 is a module that implements the execution engine supporting threadpool, asynchronous socket APIs and asynchronous file APIs for Windows.

Design

execution_engine_win32 is backed by a Win32 threadpool (PTP_POOL).

Exposed API

execution_engine_win32 implements the execution_engine API and additionally exposes the following API:

    typedef struct EXECUTION_ENGINE_PARAMETERS_TAG
    {
        uint32_t min_thread_count;
        uint32_t max_thread_count;
    } EXECUTION_ENGINE_PARAMETERS;

#define DEFAULT_MIN_THREAD_COUNT 4
#define DEFAULT_MAX_THREAD_COUNT 0 // no max thread count

MOCKABLE_FUNCTION(, EXECUTION_ENGINE_HANDLE, execution_engine_create, void*, execution_engine_parameters);
MOCKABLE_FUNCTION(, void, execution_engine_dec_ref, EXECUTION_ENGINE_HANDLE, execution_engine);
MOCKABLE_FUNCTION(, void, execution_engine_inc_ref, EXECUTION_ENGINE_HANDLE, execution_engine);
MOCKABLE_FUNCTION(, PTP_POOL, execution_engine_win32_get_threadpool, EXECUTION_ENGINE_HANDLE, execution_engine);

execution_engine_create

MOCKABLE_FUNCTION(, EXECUTION_ENGINE_HANDLE, execution_engine_create, void*, execution_engine_parameters);

execution_engine_create creates an execution engine.

SRS_EXECUTION_ENGINE_WIN32_01_001: [ execution_engine_create shall allocate a new execution engine and on success shall return a non-NULL handle. ]

SRS_EXECUTION_ENGINE_WIN32_01_011: [ If execution_engine_parameters is NULL, execution_engine_create shall use the defaults DEFAULT_MIN_THREAD_COUNT and DEFAULT_MAX_THREAD_COUNT as parameters. ]

SRS_EXECUTION_ENGINE_WIN32_01_002: [ execution_engine_parameters shall be interpreted as EXECUTION_ENGINE_PARAMETERS. ]

SRS_EXECUTION_ENGINE_WIN32_01_003: [ execution_engine_create shall call CreateThreadpool to create the Win32 threadpool. ]

SRS_EXECUTION_ENGINE_WIN32_01_004: [ execution_engine_create shall set the minimum number of threads to the min_thread_count field of execution_engine_parameters. ]

SRS_EXECUTION_ENGINE_WIN32_01_005: [ execution_engine_create shall set the maximum number of threads to the max_thread_count field of execution_engine_parameters. ]

SRS_EXECUTION_ENGINE_WIN32_01_012: [ If max_thread_count is 0, execution_engine_create shall not set the maximum thread count. ]

SRS_EXECUTION_ENGINE_WIN32_01_013: [ If max_thread_count is non-zero, but less than min_thread_count, execution_engine_create shall fail and return NULL. ]

SRS_EXECUTION_ENGINE_WIN32_01_006: [ If any error occurs, execution_engine_create shall fail and return NULL. ]

execution_engine_dec_ref

MOCKABLE_FUNCTION(, void, execution_engine_dec_ref, EXECUTION_ENGINE_HANDLE, execution_engine);

execution_engine_dec_ref decrements the ref count and frees all resources associated with execution_engine if needed.

SRS_EXECUTION_ENGINE_WIN32_01_007: [ If execution_engine is NULL, execution_engine_dec_ref shall return. ]

SRS_EXECUTION_ENGINE_WIN32_03_001: [ Otherwise execution_engine_dec_ref shall decrement the refcount. ]

SRS_EXECUTION_ENGINE_WIN32_03_002: [ If the refcount is zero execution_engine_dec_ref shall close the threadpool. ]

MOCKABLE_FUNCTION(, void, execution_engine_inc_ref, EXECUTION_ENGINE_HANDLE, execution_engine);

execution_engine_inc_ref increments the ref count on the execution_engine.

SRS_EXECUTION_ENGINE_WIN32_03_003: [ If execution_engine is NULL then execution_engine_inc_ref shall return. ]

SRS_EXECUTION_ENGINE_WIN32_03_004: [ Otherwise execution_engine_inc_ref shall increment the reference count for execution_engine. ]

execution_engine_win32_get_threadpool

MOCKABLE_FUNCTION(, PTP_POOL, execution_engine_win32_get_threadpool, EXECUTION_ENGINE_HANDLE, execution_engine);

execution_engine_win32_get_threadpool returns the underlying Win32 threadpool handle.

SRS_EXECUTION_ENGINE_WIN32_01_009: [ If execution_engine is NULL, execution_engine_win32_get_threadpool shall fail and return NULL. ]

SRS_EXECUTION_ENGINE_WIN32_01_010: [ Otherwise, execution_engine_win32_get_threadpool shall return the threadpool handle created in execution_engine_create. ]