5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 2007 Pekka Riikonen
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.
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.
20 #ifndef SILCTHREAD_I_H
21 #define SILCTHREAD_I_H
24 #error "Do not include this header directly"
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 char error_reason[256]; /* Reason for the error */
35 SilcResult error; /* Errno, last error */
36 } *SilcTls, SilcTlsStruct;
38 /* The internal Tls API. Implementation is platform specific. */
40 /* Initializes Tls for current thread. Must be called for each thread to
41 allocate Tls for the thread, including the main thread. */
42 SilcTls silc_thread_tls_init(void);
44 /* Return current thread's Tls structure. */
45 SilcTls silc_thread_get_tls(void);
47 #endif /* SILCTHREAD_I_H */