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