include
actionlib
destruction_guard.h
Go to the documentation of this file.
1
/*********************************************************************
2
*
3
* Software License Agreement (BSD License)
4
*
5
* Copyright (c) 2009, Willow Garage, Inc.
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
*
12
* * Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
14
* * Redistributions in binary form must reproduce the above
15
* copyright notice, this list of conditions and the following
16
* disclaimer in the documentation and/or other materials provided
17
* with the distribution.
18
* * Neither the name of Willow Garage, Inc. nor the names of its
19
* contributors may be used to endorse or promote products derived
20
* from this software without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
* POSSIBILITY OF SUCH DAMAGE.
34
*
35
* Author: Eitan Marder-Eppstein
36
*********************************************************************/
37
#ifndef ACTIONLIB__DESTRUCTION_GUARD_H_
38
#define ACTIONLIB__DESTRUCTION_GUARD_H_
39
40
#include <boost/thread/condition.hpp>
41
#include <boost/thread/mutex.hpp>
42
43
namespace
actionlib
44
{
49
class
DestructionGuard
50
{
51
public
:
55
DestructionGuard
()
56
:
use_count_
(0),
destructing_
(false) {}
57
void
destruct
()
58
{
59
boost::mutex::scoped_lock lock(
mutex_
);
60
destructing_
=
true
;
61
while
(
use_count_
> 0) {
62
count_condition_
.timed_wait(lock, boost::posix_time::milliseconds(1000));
63
}
64
}
65
70
bool
tryProtect
()
71
{
72
boost::mutex::scoped_lock lock(
mutex_
);
73
if
(
destructing_
) {
74
return
false
;
75
}
76
use_count_
++;
77
return
true
;
78
}
79
83
void
unprotect
()
84
{
85
boost::mutex::scoped_lock lock(
mutex_
);
86
use_count_
--;
87
}
88
93
class
ScopedProtector
94
{
95
public
:
100
ScopedProtector
(
DestructionGuard
& guard)
101
:
guard_
(guard),
protected_
(false)
102
{
103
protected_
=
guard_
.
tryProtect
();
104
}
105
110
bool
isProtected
()
111
{
112
return
protected_
;
113
}
114
118
~ScopedProtector
()
119
{
120
if
(
protected_
) {
121
guard_
.
unprotect
();
122
}
123
}
124
125
private
:
126
DestructionGuard
&
guard_
;
127
bool
protected_
;
128
};
129
130
private
:
131
boost::mutex
mutex_
;
132
int
use_count_
;
133
bool
destructing_
;
134
boost::condition
count_condition_
;
135
};
136
137
}
// namespace actionlib
138
#endif // ACTIONLIB__DESTRUCTION_GUARD_H_
actionlib::DestructionGuard::ScopedProtector::protected_
bool protected_
Definition:
destruction_guard.h:162
actionlib::DestructionGuard::ScopedProtector::isProtected
bool isProtected()
Checks if the ScopedProtector successfully protected the DestructionGuard.
Definition:
destruction_guard.h:145
actionlib::DestructionGuard::destruct
void destruct()
Definition:
destruction_guard.h:92
actionlib::DestructionGuard::use_count_
int use_count_
Definition:
destruction_guard.h:167
actionlib::DestructionGuard::mutex_
boost::mutex mutex_
Definition:
destruction_guard.h:166
actionlib::DestructionGuard::ScopedProtector::~ScopedProtector
~ScopedProtector()
Releases protection of the DestructionGuard if necessary.
Definition:
destruction_guard.h:153
actionlib::DestructionGuard::ScopedProtector::guard_
DestructionGuard & guard_
Definition:
destruction_guard.h:161
actionlib::DestructionGuard::destructing_
bool destructing_
Definition:
destruction_guard.h:168
actionlib::DestructionGuard::count_condition_
boost::condition count_condition_
Definition:
destruction_guard.h:169
actionlib::DestructionGuard::tryProtect
bool tryProtect()
Attempts to protect the guarded object from being destructed.
Definition:
destruction_guard.h:105
actionlib
Definition:
action_definition.h:40
actionlib::DestructionGuard::unprotect
void unprotect()
Releases protection on the guarded object.
Definition:
destruction_guard.h:118
actionlib::DestructionGuard::DestructionGuard
DestructionGuard()
Constructor for a DestructionGuard.
Definition:
destruction_guard.h:90
actionlib::DestructionGuard
This class protects an object from being destructed until all users of that object relinquish control...
Definition:
destruction_guard.h:84
actionlib::DestructionGuard::ScopedProtector::ScopedProtector
ScopedProtector(DestructionGuard &guard)
Constructor for a ScopedProtector.
Definition:
destruction_guard.h:135
actionlib
Author(s): Eitan Marder-Eppstein, Vijay Pradeep, Mikael Arguedas
autogenerated on Fri May 19 2023 02:36:55