libzypp
17.7.0
Mutex.cc
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
11
#include "
zypp/thread/Mutex.h
"
12
#include "
zypp/thread/MutexException.h
"
13
#include "
zypp/base/Gettext.h
"
14
15
17
namespace
zypp
18
{
19
21
namespace
thread
22
{
23
24
// -------------------------------------------------------------
25
Mutex::Mutex
()
26
{
27
pthread_mutexattr_t
attr
;
28
29
int
ret = pthread_mutexattr_init(&
attr
);
30
if
( ret != 0)
31
{
32
ZYPP_THROW_ERRNO_MSG
(
zypp::thread::MutexException
,
33
_
(
"Can't initialize mutex attributes"
));
34
}
35
36
ret = pthread_mutexattr_settype(&
attr
, PTHREAD_MUTEX_RECURSIVE);
37
if
( ret != 0)
38
{
39
ZYPP_THROW_ERRNO_MSG
(
MutexException
,
40
_
(
"Can't set recursive mutex attribute"
));
41
}
42
43
ret = pthread_mutex_init(&
m_mutex
, &
attr
);
44
if
( ret != 0)
45
{
46
ZYPP_THROW_ERRNO_MSG
(
MutexException
,
47
_
(
"Can't initialize recursive mutex"
));
48
}
49
}
50
51
// -------------------------------------------------------------
52
Mutex::~Mutex
()
53
{
54
if
( pthread_mutex_destroy(&
m_mutex
) != 0 && errno == EBUSY)
55
{
56
// try to unlock and to destroy again...
57
if
( pthread_mutex_unlock(&
m_mutex
) == 0)
58
{
59
pthread_mutex_destroy(&
m_mutex
);
60
}
61
/*
62
else
63
{
64
ZYPP_THROW_ERRNO_MSG(MutexException,
65
_("Can't destroy mutex owned by another thread"));
66
}
67
*/
68
}
69
}
70
71
// -------------------------------------------------------------
72
void
Mutex::lock
()
73
{
74
if
( pthread_mutex_lock(&
m_mutex
) != 0)
75
{
76
ZYPP_THROW_ERRNO_MSG
(
MutexException
,
77
_
(
"Can't acquire the mutex lock"
));
78
}
79
}
80
81
// -------------------------------------------------------------
82
void
Mutex::unlock
()
83
{
84
if
( pthread_mutex_unlock(&
m_mutex
) != 0)
85
{
86
ZYPP_THROW_ERRNO_MSG
(
MutexException
,
87
_
(
"Can't release the mutex lock"
));
88
}
89
}
90
91
// -------------------------------------------------------------
92
bool
Mutex::trylock
()
93
{
94
return
(pthread_mutex_trylock(&
m_mutex
) == 0);
95
}
96
97
99
}
// namespace thread
101
103
}
// namespace zypp
105
106
/*
107
** vim: set ts=2 sts=2 sw=2 ai et:
108
*/
zypp::thread::Mutex::trylock
bool trylock()
Try to acquire ownership of this Mutex object.
Definition:
Mutex.cc:92
attr
sat::SolvAttr attr
Definition:
PoolQuery.cc:311
ZYPP_THROW_ERRNO_MSG
#define ZYPP_THROW_ERRNO_MSG(EXCPTTYPE, MSG)
Throw Exception built from errno and a message string.
Definition:
Exception.h:417
zypp::thread::MutexException
Exception type thrown on mutex errors.
Definition:
MutexException.h:33
MutexException.h
_
#define _(MSG)
Definition:
Gettext.h:29
zypp::thread::Mutex::lock
void lock()
Acquire ownership of this Mutex object.
Definition:
Mutex.cc:72
zypp
Easy-to use interface to the ZYPP dependency resolver.
Definition:
CodePitfalls.doc:1
zypp::thread::Mutex::Mutex
Mutex()
Create a new recursive Mutex object.
Definition:
Mutex.cc:25
Mutex.h
Gettext.h
zypp::thread::Mutex::unlock
void unlock()
Release ownership of this Mutex object.
Definition:
Mutex.cc:82
zypp::thread::Mutex::m_mutex
RecursiveMutex_t m_mutex
Definition:
Mutex.h:82
zypp::thread::Mutex::~Mutex
~Mutex()
Destroys this Mutex object.
Definition:
Mutex.cc:52
zypp
thread
Mutex.cc
Generated by
1.8.17