quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

threading_helpers.h (3788B)


      1 /**
      2  * \file threading_helpers.h
      3  *
      4  * \brief This file contains the prototypes of helper functions for the purpose
      5  *        of testing threading.
      6  */
      7 
      8 /*
      9  *  Copyright The Mbed TLS Contributors
     10  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
     11  */
     12 
     13 #ifndef THREADING_HELPERS_H
     14 #define THREADING_HELPERS_H
     15 
     16 #if defined MBEDTLS_THREADING_C
     17 
     18 #include "mbedtls/private_access.h"
     19 #include "mbedtls/build_info.h"
     20 
     21 /* Most fields of publicly available structs are private and are wrapped with
     22  * MBEDTLS_PRIVATE macro. This define allows tests to access the private fields
     23  * directly (without using the MBEDTLS_PRIVATE wrapper). */
     24 #define MBEDTLS_ALLOW_PRIVATE_ACCESS
     25 
     26 #define MBEDTLS_ERR_THREADING_THREAD_ERROR                 -0x001F
     27 
     28 #if defined(MBEDTLS_THREADING_PTHREAD)
     29 #include <pthread.h>
     30 #endif /* MBEDTLS_THREADING_PTHREAD */
     31 
     32 #if defined(MBEDTLS_THREADING_ALT)
     33 /* You should define the mbedtls_test_thread_t type in your header */
     34 #include "threading_alt.h"
     35 
     36 /**
     37  * \brief                   Set your alternate threading implementation
     38  *                          function pointers for test threads. If used, this
     39  *                          function must be called once in the main thread
     40  *                          before any other MbedTLS function is called.
     41  *
     42  * \note                    These functions are part of the testing API only and
     43  *                          thus not considered part of the public API of
     44  *                          MbedTLS and thus may change without notice.
     45  *
     46  * \param thread_create     The thread create function implementation.
     47  * \param thread_join       The thread join function implementation.
     48 
     49  */
     50 void mbedtls_test_thread_set_alt(int (*thread_create)(mbedtls_test_thread_t *thread,
     51                                                       void *(*thread_func)(
     52                                                           void *),
     53                                                       void *thread_data),
     54                                  int (*thread_join)(mbedtls_test_thread_t *thread));
     55 
     56 #else /* MBEDTLS_THREADING_ALT*/
     57 
     58 typedef struct mbedtls_test_thread_t {
     59 
     60 #if defined(MBEDTLS_THREADING_PTHREAD)
     61     pthread_t MBEDTLS_PRIVATE(thread);
     62 #else /* MBEDTLS_THREADING_PTHREAD */
     63     /* Make sure this struct is always non-empty */
     64     unsigned dummy;
     65 #endif
     66 
     67 } mbedtls_test_thread_t;
     68 
     69 #endif /* MBEDTLS_THREADING_ALT*/
     70 
     71 /**
     72  * \brief                   The function pointers for thread create and thread
     73  *                          join.
     74  *
     75  * \note                    These functions are part of the testing API only
     76  *                          and thus not considered part of the public API of
     77  *                          MbedTLS and thus may change without notice.
     78  *
     79  * \note                    All these functions are expected to work or
     80  *                          the result will be undefined.
     81  */
     82 extern int (*mbedtls_test_thread_create)(mbedtls_test_thread_t *thread,
     83                                          void *(*thread_func)(void *), void *thread_data);
     84 extern int (*mbedtls_test_thread_join)(mbedtls_test_thread_t *thread);
     85 
     86 #if defined(MBEDTLS_THREADING_PTHREAD) && defined(MBEDTLS_TEST_HOOKS)
     87 #define MBEDTLS_TEST_MUTEX_USAGE
     88 #endif
     89 
     90 #if defined(MBEDTLS_TEST_MUTEX_USAGE)
     91 /**
     92  *  Activate the mutex usage verification framework. See threading_helpers.c for
     93  *  information.
     94  */
     95 void mbedtls_test_mutex_usage_init(void);
     96 
     97 /**
     98  *  Deactivate the mutex usage verification framework. See threading_helpers.c
     99  *  for information.
    100  */
    101 void mbedtls_test_mutex_usage_end(void);
    102 
    103 /**
    104  *  Call this function after executing a test case to check for mutex usage
    105  * errors.
    106  */
    107 void mbedtls_test_mutex_usage_check(void);
    108 #endif /* MBEDTLS_TEST_MUTEX_USAGE */
    109 
    110 #endif /* MBEDTLS_THREADING_C */
    111 
    112 #endif /* THREADING_HELPERS_H */