libzypp
11.13.5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
libzypp
Welcome to libzypp
Code Pitfalls - Frequently made mistakes
Code Snippets
Environment Variables
Testing for provided features.
Notes on revisions
Extending ZYpp: Plugins and Hooks
Services
Solver - Vendor protection
Writing and tunning testcases
Libzypp and threads
Todo List
Deprecated List
Modules
Namespaces
Classes
Files
File List
zypp
base
media
misc
parser
pool
repo
sat
solver
target
thread
Mutex.cc
Mutex.h
MutexException.h
MutexLock.h
Once.h
ui
url
ws
zypp_detail
APIConfig.h
Arch.cc
Arch.h
AutoDispose.h
Bit.h
ByteCount.cc
ByteCount.h
Callback.h
Capabilities.cc
Capabilities.h
Capability.cc
Capability.h
CapMatch.cc
CapMatch.h
Changelog.cc
Changelog.h
CheckSum.cc
CheckSum.h
CountryCode.cc
CountryCode.h
Date.cc
Date.h
Dep.cc
Dep.h
Digest.cc
Digest.h
DiskUsage.cc
DiskUsage.h
DiskUsageCounter.cc
DiskUsageCounter.h
DownloadMode.cc
DownloadMode.h
Edition.cc
Edition.h
ExternalProgram.cc
ExternalProgram.h
Fetcher.cc
Fetcher.h
FileChecker.cc
FileChecker.h
Filter.h
Glob.cc
Glob.h
HistoryLog.cc
HistoryLog.h
HistoryLogData.cc
HistoryLogData.h
IdString.cc
IdString.h
IdStringType.h
InstanceId.cc
InstanceId.h
KeyContext.h
KeyRing.cc
KeyRing.h
KVMap.h
LanguageCode.cc
LanguageCode.h
Locale.cc
Locale.h
Locks.cc
Locks.h
ManagedFile.h
MediaProducts.cc
MediaProducts.h
MediaSetAccess.cc
MediaSetAccess.h
Misc.h
OnMediaLocation.cc
OnMediaLocation.h
Package.cc
Package.h
PackageKeyword.h
Patch.cc
Patch.h
PathInfo.cc
PathInfo.h
Pathname.cc
Pathname.h
Pattern.cc
Pattern.h
PluginFrame.cc
PluginFrame.h
PluginFrameException.cc
PluginFrameException.h
PluginScript.cc
PluginScript.h
PluginScriptException.cc
PluginScriptException.h
PoolItem.cc
PoolItem.h
PoolItemBest.cc
PoolItemBest.h
PoolQuery.cc
PoolQuery.h
PoolQueryResult.cc
PoolQueryResult.h
PoolQueryUtil.tcc
ProblemSolution.cc
ProblemSolution.h
ProblemTypes.h
Product.cc
Product.h
ProgressData.cc
ProgressData.h
ProvideFilePolicy.cc
ProvideFilePolicy.h
PublicKey.cc
PublicKey.h
Range.cc
Range.h
Rel.cc
Rel.h
RelCompare.h
RepoInfo.cc
RepoInfo.h
RepoManager.cc
RepoManager.h
Repository.cc
Repository.h
RepoStatus.cc
RepoStatus.h
ResFilters.h
ResKind.cc
ResKind.h
ResObject.cc
ResObject.h
ResObjects.h
Resolvable.cc
Resolvable.h
Resolver.cc
Resolver.h
ResolverProblem.cc
ResolverProblem.h
ResPool.cc
ResPool.h
ResPoolProxy.cc
ResPoolProxy.h
ResStatus.cc
ResStatus.h
ResTraits.h
ServiceInfo.cc
ServiceInfo.h
Signature.cc
Signature.h
SrcPackage.cc
SrcPackage.h
SysContent.cc
SysContent.h
Target.cc
Target.h
TmpPath.cc
TmpPath.h
TriBool.h
Url.cc
Url.h
Vendor.h
VendorAttr.cc
VendorAttr.h
VendorSupportOptions.cc
VendorSupportOptions.h
ZConfig.cc
ZConfig.h
ZYpp.cc
ZYpp.h
ZYppCallbacks.h
ZYppCommit.h
ZYppCommitPolicy.cc
ZYppCommitPolicy.h
ZYppCommitResult.cc
ZYppCommitResult.h
ZYppFactory.cc
ZYppFactory.h
File Members
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.cc
Generated by
1.8.1