ardour
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
libs
pbd
semutils.cc
Go to the documentation of this file.
1
/*
2
Copyright (C) 2010 Paul Davis
3
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
8
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
13
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
*/
18
19
#include "
pbd/semutils.h
"
20
#include "
pbd/failed_constructor.h
"
21
22
using namespace
PBD
;
23
24
ProcessSemaphore::ProcessSemaphore
(
const
char
*
name
,
int
val)
25
{
26
#ifdef PLATFORM_WINDOWS
27
if
((
_sem
= CreateSemaphore(NULL, val, 32767, name)) == NULL) {
28
throw
failed_constructor
();
29
}
30
31
#elif __APPLE__
32
if
((
_sem
= sem_open (name, O_CREAT, 0600, val)) == (sem_t*) SEM_FAILED) {
33
throw
failed_constructor
();
34
}
35
36
/* this semaphore does not exist for IPC */
37
38
if
(sem_unlink (name)) {
39
throw
failed_constructor
();
40
}
41
42
#else
43
(void) name;
/* stop gcc warning on !Apple systems */
44
45
if
(sem_init (&
_sem
, 0, val)) {
46
throw
failed_constructor
();
47
}
48
#endif
49
}
50
51
ProcessSemaphore::~ProcessSemaphore
()
52
{
53
#ifdef PLATFORM_WINDOWS
54
CloseHandle(
_sem
);
55
#elif __APPLE__
56
sem_close (
ptr_to_sem
());
57
#endif
58
}
59
60
#ifdef PLATFORM_WINDOWS
61
62
int
63
ProcessSemaphore::signal
()
64
{
65
// non-zero on success, opposite to posix
66
return
!ReleaseSemaphore(
_sem
, 1, NULL);
67
}
68
69
int
70
ProcessSemaphore::wait
()
71
{
72
DWORD result = 0;
73
result = WaitForSingleObject(
_sem
, INFINITE);
74
return
(result == WAIT_OBJECT_0);
75
}
76
77
#endif
failed_constructor.h
PBD::ProcessSemaphore::ptr_to_sem
sem_t * ptr_to_sem() const
Definition:
semutils.h:42
PBD::ProcessSemaphore::wait
int wait()
Definition:
semutils.h:56
PBD::ProcessSemaphore::ProcessSemaphore
ProcessSemaphore(const char *name, int val)
Definition:
semutils.cc:24
semutils.h
PBD::ProcessSemaphore::signal
int signal()
Definition:
semutils.h:55
name
const char * name
Definition:
rc_option_editor.cc:257
PBD
Definition:
debug.h:30
failed_constructor
Definition:
failed_constructor.h:27
PBD::ProcessSemaphore::_sem
sem_t _sem
Definition:
semutils.h:41
PBD::ProcessSemaphore::~ProcessSemaphore
~ProcessSemaphore()
Definition:
semutils.cc:51
Generated on Sun May 24 2015 12:15:08 for ardour by
1.8.8