This Trac instance is not used for development anymore!

We migrated our development workflow to git and Gitea.
To test the future redirection, replace trac by ariadne in the page URL.

source: ps/trunk/build/premake/premake5/contrib/mbedtls/library/threading.c

Last change on this file was 20366, checked in by Itms, 7 years ago

Alpha 12 version of Premake 5, including prebuilt binary for Windows.
Directly taken from https://premake.github.io/.

Refs #3729.

File size: 4.1 KB
Line 
1/*
2 * Threading abstraction layer
3 *
4 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
8 * not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * This file is part of mbed TLS (https://tls.mbed.org)
20 */
21
22#if !defined(MBEDTLS_CONFIG_FILE)
23#include "mbedtls/config.h"
24#else
25#include MBEDTLS_CONFIG_FILE
26#endif
27
28#if defined(MBEDTLS_THREADING_C)
29
30#include "mbedtls/threading.h"
31
32#if defined(MBEDTLS_THREADING_PTHREAD)
33static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex )
34{
35 if( mutex == NULL )
36 return;
37
38 mutex->is_valid = pthread_mutex_init( &mutex->mutex, NULL ) == 0;
39}
40
41static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex )
42{
43 if( mutex == NULL )
44 return;
45
46 (void) pthread_mutex_destroy( &mutex->mutex );
47}
48
49static int threading_mutex_lock_pthread( mbedtls_threading_mutex_t *mutex )
50{
51 if( mutex == NULL || ! mutex->is_valid )
52 return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA );
53
54 if( pthread_mutex_lock( &mutex->mutex ) != 0 )
55 return( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
56
57 return( 0 );
58}
59
60static int threading_mutex_unlock_pthread( mbedtls_threading_mutex_t *mutex )
61{
62 if( mutex == NULL || ! mutex->is_valid )
63 return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA );
64
65 if( pthread_mutex_unlock( &mutex->mutex ) != 0 )
66 return( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
67
68 return( 0 );
69}
70
71void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t * ) = threading_mutex_init_pthread;
72void (*mbedtls_mutex_free)( mbedtls_threading_mutex_t * ) = threading_mutex_free_pthread;
73int (*mbedtls_mutex_lock)( mbedtls_threading_mutex_t * ) = threading_mutex_lock_pthread;
74int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_unlock_pthread;
75
76/*
77 * With phtreads we can statically initialize mutexes
78 */
79#define MUTEX_INIT = { PTHREAD_MUTEX_INITIALIZER, 1 }
80
81#endif /* MBEDTLS_THREADING_PTHREAD */
82
83#if defined(MBEDTLS_THREADING_ALT)
84static int threading_mutex_fail( mbedtls_threading_mutex_t *mutex )
85{
86 ((void) mutex );
87 return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA );
88}
89static void threading_mutex_dummy( mbedtls_threading_mutex_t *mutex )
90{
91 ((void) mutex );
92 return;
93}
94
95void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t * ) = threading_mutex_dummy;
96void (*mbedtls_mutex_free)( mbedtls_threading_mutex_t * ) = threading_mutex_dummy;
97int (*mbedtls_mutex_lock)( mbedtls_threading_mutex_t * ) = threading_mutex_fail;
98int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_fail;
99
100/*
101 * Set functions pointers and initialize global mutexes
102 */
103void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * ),
104 void (*mutex_free)( mbedtls_threading_mutex_t * ),
105 int (*mutex_lock)( mbedtls_threading_mutex_t * ),
106 int (*mutex_unlock)( mbedtls_threading_mutex_t * ) )
107{
108 mbedtls_mutex_init = mutex_init;
109 mbedtls_mutex_free = mutex_free;
110 mbedtls_mutex_lock = mutex_lock;
111 mbedtls_mutex_unlock = mutex_unlock;
112
113 mbedtls_mutex_init( &mbedtls_threading_readdir_mutex );
114 mbedtls_mutex_init( &mbedtls_threading_gmtime_mutex );
115}
116
117/*
118 * Free global mutexes
119 */
120void mbedtls_threading_free_alt( void )
121{
122 mbedtls_mutex_free( &mbedtls_threading_readdir_mutex );
123 mbedtls_mutex_free( &mbedtls_threading_gmtime_mutex );
124}
125#endif /* MBEDTLS_THREADING_ALT */
126
127/*
128 * Define global mutexes
129 */
130#ifndef MUTEX_INIT
131#define MUTEX_INIT
132#endif
133mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex MUTEX_INIT;
134mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex MUTEX_INIT;
135
136#endif /* MBEDTLS_THREADING_C */
Note: See TracBrowser for help on using the repository browser.