1 /***************************************************************************
2 begin : Mon Jul 14 2008
3 copyright : (C) 2008 by Martin Preuss
4 email : martin@libchipcard.de
5
6
7 ***************************************************************************
8 * *
9 * This library is free software; you can redistribute it and/or *
10 * modify it under the terms of the GNU Lesser General Public *
11 * License as published by the Free Software Foundation; either *
12 * version 2.1 of the License, or (at your option) any later version. *
13 * *
14 * This library is distributed in the hope that it will be useful, *
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
17 * Lesser General Public License for more details. *
18 * *
19 * You should have received a copy of the GNU Lesser General Public *
20 * License along with this library; if not, write to the Free Software *
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
22 * MA 02111-1307 USA *
23 * *
24 ***************************************************************************/
25
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29
30 #include "mutex_p.h"
31 #include <gwenhywfar/misc.h>
32 #include <gwenhywfar/debug.h>
33
34 #include <pthread.h>
35
36
37
GWEN_Mutex_new(void)38 GWEN_MUTEX *GWEN_Mutex_new(void)
39 {
40 GWEN_MUTEX *mtx;
41
42 GWEN_NEW_OBJECT(GWEN_MUTEX, mtx);
43
44 pthread_mutex_init(&(mtx->mutex), NULL);
45
46 return mtx;
47 }
48
49
50
GWEN_Mutex_free(GWEN_UNUSED GWEN_MUTEX * mtx)51 void GWEN_Mutex_free(GWEN_UNUSED GWEN_MUTEX *mtx)
52 {
53 if (mtx) {
54 pthread_mutex_destroy(&(mtx->mutex));
55 }
56 }
57
58
59
GWEN_Mutex_Lock(GWEN_MUTEX * mtx)60 int GWEN_Mutex_Lock(GWEN_MUTEX *mtx)
61 {
62 int rv;
63
64 rv=pthread_mutex_lock(&(mtx->mutex));
65 if (rv) {
66 DBG_INFO(GWEN_LOGDOMAIN,
67 "pthread_mutex_lock: %s", strerror(rv));
68 return GWEN_ERROR_IO;
69 }
70
71 return 0;
72 }
73
74
75
GWEN_Mutex_Unlock(GWEN_MUTEX * mtx)76 int GWEN_Mutex_Unlock(GWEN_MUTEX *mtx)
77 {
78 int rv;
79
80 rv=pthread_mutex_unlock(&(mtx->mutex));
81 if (rv) {
82 DBG_INFO(GWEN_LOGDOMAIN,
83 "pthread_mutex_unlock: %s", strerror(rv));
84 return GWEN_ERROR_IO;
85 }
86
87 return 0;
88 }
89
90
91
92
93