FreeTDS API
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
tdsthread.h
1
/* FreeTDS - Library of routines accessing Sybase and Microsoft databases
2
*
3
* Copyright (C) 2005 Liam Widdowson
4
* Copyright (C) 2010 Frediano Ziglio
5
*
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Library General Public
8
* License as published by the Free Software Foundation; either
9
* version 2 of the License, or (at your option) any later version.
10
*
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Library General Public License for more details.
15
*
16
* You should have received a copy of the GNU Library General Public
17
* License along with this library; if not, write to the
18
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19
* Boston, MA 02111-1307, USA.
20
*/
21
22
#ifndef TDSTHREAD_H
23
#define TDSTHREAD_H 1
24
25
/* $Id: tdsthread.h,v 1.9 2010-09-16 11:12:08 freddy77 Exp $ */
26
27
#undef TDS_HAVE_MUTEX
28
29
#if defined(_THREAD_SAFE) && defined(TDS_HAVE_PTHREAD_MUTEX)
30
31
#include <pthread.h>
32
33
#define TDS_MUTEX_DEFINE(name) pthread_mutex_t name = PTHREAD_MUTEX_INITIALIZER
34
#define TDS_MUTEX_LOCK(mtx) pthread_mutex_lock(mtx)
35
#define TDS_MUTEX_UNLOCK(mtx) pthread_mutex_unlock(mtx)
36
#define TDS_MUTEX_DECLARE(name) pthread_mutex_t name
37
#define TDS_MUTEX_INIT(mtx) pthread_mutex_init(mtx, NULL)
38
#define TDS_MUTEX_FREE(mtx) pthread_mutex_destroy(mtx)
39
40
#define TDS_HAVE_MUTEX 1
41
42
#elif defined(_WIN32)
43
44
struct
ptw32_mcs_node_t_
;
45
46
typedef
struct
tds_win_mutex_t_ {
47
struct
ptw32_mcs_node_t_
*lock;
48
LONG done;
49
CRITICAL_SECTION crit;
50
} tds_win_mutex_t;
51
52
void
tds_win_mutex_lock(tds_win_mutex_t *mutex);
53
static
inline
int
tds_win_mutex_init(tds_win_mutex_t *mtx)
54
{
55
mtx->lock = NULL;
56
mtx->done = 0;
57
return
0;
58
}
59
/* void tds_win_mutex_unlock(tds_win_mutex_t *mutex); */
60
61
#define TDS_MUTEX_DEFINE(name) tds_win_mutex_t name = { NULL, 0 }
62
#define TDS_MUTEX_LOCK(mtx) \
63
do { if ((mtx)->done) EnterCriticalSection(&(mtx)->crit); else tds_win_mutex_lock(mtx); } while(0)
64
#define TDS_MUTEX_UNLOCK(mtx) LeaveCriticalSection(&(mtx)->crit)
65
#define TDS_MUTEX_DECLARE(name) tds_win_mutex_t name
66
#define TDS_MUTEX_INIT(mtx) tds_win_mutex_init(mtx)
67
#define TDS_MUTEX_FREE(mtx) do { if ((mtx)->done) { DeleteCriticalSection(&(mtx)->crit); (mtx)->done = 0; } } while(0)
68
69
#define TDS_HAVE_MUTEX 1
70
71
#else
72
73
#define TDS_MUTEX_DEFINE(name) int name
74
#define TDS_MUTEX_LOCK(mtx)
75
#define TDS_MUTEX_UNLOCK(mtx)
76
#define TDS_MUTEX_DECLARE(name) int name
77
#define TDS_MUTEX_INIT(mtx)
78
#define TDS_MUTEX_FREE(mtx)
79
80
#endif
81
82
#endif
Generated on Wed Mar 11 2015 23:36:37 for FreeTDS API by
1.8.2