1/**
2 * Summary: interfaces for thread handling
3 * Description: set of generic threading related routines
4 *              should work with pthreads, Windows native or TLS threads
5 *
6 * Copy: See Copyright for the status of this software.
7 *
8 * Author: Daniel Veillard
9 */
10
11#ifndef __XML_THREADS_H__
12#define __XML_THREADS_H__
13
14#include <libxml/xmlversion.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20/*
21 * xmlMutex are a simple mutual exception locks.
22 */
23typedef struct _xmlMutex xmlMutex;
24typedef xmlMutex *xmlMutexPtr;
25
26/*
27 * xmlRMutex are reentrant mutual exception locks.
28 */
29typedef struct _xmlRMutex xmlRMutex;
30typedef xmlRMutex *xmlRMutexPtr;
31
32#ifdef __cplusplus
33}
34#endif
35#include <libxml/globals.h>
36#ifdef __cplusplus
37extern "C" {
38#endif
39XMLPUBFUN xmlMutexPtr XMLCALL
40			xmlNewMutex	(void);
41XMLPUBFUN void XMLCALL
42			xmlMutexLock	(xmlMutexPtr tok);
43XMLPUBFUN void XMLCALL
44			xmlMutexUnlock	(xmlMutexPtr tok);
45XMLPUBFUN void XMLCALL
46			xmlFreeMutex	(xmlMutexPtr tok);
47
48XMLPUBFUN xmlRMutexPtr XMLCALL
49			xmlNewRMutex	(void);
50XMLPUBFUN void XMLCALL
51			xmlRMutexLock	(xmlRMutexPtr tok);
52XMLPUBFUN void XMLCALL
53			xmlRMutexUnlock	(xmlRMutexPtr tok);
54XMLPUBFUN void XMLCALL
55			xmlFreeRMutex	(xmlRMutexPtr tok);
56
57/*
58 * Library wide APIs.
59 */
60XMLPUBFUN void XMLCALL
61			xmlInitThreads	(void);
62XMLPUBFUN void XMLCALL
63			xmlLockLibrary	(void);
64XMLPUBFUN void XMLCALL
65			xmlUnlockLibrary(void);
66XMLPUBFUN int XMLCALL
67			xmlGetThreadId	(void);
68XMLPUBFUN int XMLCALL
69			xmlIsMainThread	(void);
70XMLPUBFUN void XMLCALL
71			xmlCleanupThreads(void);
72XMLPUBFUN xmlGlobalStatePtr XMLCALL
73			xmlGetGlobalState(void);
74
75#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && defined(LIBXML_STATIC_FOR_DLL)
76int XMLCALL xmlDllMain(void *hinstDLL, unsigned long fdwReason, void *lpvReserved);
77#endif
78
79#ifdef __cplusplus
80}
81#endif
82
83
84#endif /* __XML_THREADS_H__ */
85