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