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 SilcSchedule schedule; /* Global scheduler */
33 void *thread_context; /* Context set with SILC Tls API */
34 void *platform_context; /* Platform specific context */
35 char error_reason[256]; /* Reason for the error */
36 SilcResult error; /* Errno, last error */
37 } *SilcTls, SilcTlsStruct;
39 /* The internal Tls API. Implementation is platform specific. */
41 /* Initializes Tls for current thread. Must be called for each thread to
42 allocate Tls for the thread, including the main thread. */
43 SilcTls silc_thread_tls_init(void);
45 /* Return current thread's Tls structure. */
46 SilcTls silc_thread_get_tls(void);
48 #endif /* SILCTHREAD_I_H */