Added.
[silc.git] / lib / silcutil / silcthread_i.h
1 /*
2
3   silcthread_i.h
4
5   Author: Pekka Riikonen <priikone@silcnet.org>
6
7   Copyright (C) 2007 Pekka Riikonen
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; version 2 of the License.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18 */
19
20 #ifndef SILCTHREAD_I_H
21 #define SILCTHREAD_I_H
22
23 #ifndef SILCTHREAD_H
24 #error "Do not include this header directly"
25 #endif
26
27 /* Thread-local storage structure.  This structure is saved to each thread's
28    Tls if the SILC Tls API is used.  This structure must be allocatable
29    with silc_calloc and freeable with silc_free, and must also be able to
30    pre-allocate from stack. */
31 typedef struct SilcTlsObject {
32   void *thread_context;                /* Context set with SILC Tls API */
33   void *platform_context;              /* Platform specific context */
34 } *SilcTls, SilcTlsStruct;
35
36 /* The internal Tls API.  Implementation is platform specific. */
37
38 /* Initializes Tls for current thread.  Must be called for each thread to
39    allocate Tls for the thread, including the main thread. */
40 SilcTls silc_thread_tls_init(void);
41
42 /* Return current thread's Tls structure. */
43 SilcTls silc_thread_get_tls(void);
44
45 #endif /* SILCTHREAD_I_H */