XRootD
Loading...
Searching...
No Matches
XrdOssArcStopMon.hh
Go to the documentation of this file.
1
#ifndef _XRDOSSARC_STOPMON_HH_
2
#define _XRDOSSARC_STOPMON_HH_
3
/******************************************************************************/
4
/* */
5
/* X r d O s s S t o p M o n . h h */
6
/* */
7
/* (c) 2025 by the Board of Trustees of the Leland Stanford, Jr., University */
8
/* All Rights Reserved */
9
/* Produced by Andrew Hanushevsky for Stanford University under contract */
10
/* DE-AC02-76-SFO0515 with the Department of Energy */
11
/* */
12
/* This file is part of the XRootD software suite. */
13
/* */
14
/* XRootD is free software: you can redistribute it and/or modify it under */
15
/* the terms of the GNU Lesser General Public License as published by the */
16
/* Free Software Foundation, either version 3 of the License, or (at your */
17
/* option) any later version. */
18
/* */
19
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22
/* License for more details. */
23
/* */
24
/* You should have received a copy of the GNU Lesser General Public License */
25
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26
/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27
/* */
28
/* The copyright holder's institutional names and contributor's names may not */
29
/* be used to endorse or promote products derived from this software without */
30
/* specific prior written permission of the institution or contributor. */
31
/******************************************************************************/
32
33
#include "
Xrd/XrdJob.hh
"
34
35
#include "
XrdSys/XrdSysRAtomic.hh
"
36
#include "
XrdSys/XrdSysXSLock.hh
"
37
38
/******************************************************************************/
39
/* C l a s s X r d O s s A r c S t o p M o n */
40
/******************************************************************************/
41
42
class
XrdOssArcStopMon
:
public
XrdJob
43
{
44
public
:
45
46
// This method is only used by the parent class. Note that only the parent
47
// is allowed to get an exclusive lock.
48
//
49
virtual
void
DoIt
()
override
;
50
51
// Activate stop prevention
52
//
53
void
Activate
() {
if
(!isActive.exchange(
true
)) xsLock.Lock(
xs_Shared
);}
54
55
// Deactivate stop prevention
56
//
57
void
Deactivate
() {
if
(isActive.exchange(
false
))
58
xsLock.UnLock(
xs_Shared
);
59
}
60
61
// Parent constructor. Caller promises that apath will remain valid for
62
// the whole duration of process execution.
63
//
64
XrdOssArcStopMon
(
const
char
* apath,
int
chkT,
bool
& aOK);
65
66
// Child constructor
67
//
68
XrdOssArcStopMon
(
XrdOssArcStopMon
*
parent
) : xsLock(
parent
->xsLock),
69
admPath(0), admDirFD(-1), isActive(true)
70
{xsLock.Lock(
xs_Shared
);}
71
72
// If you try to delete a fully constructed parent instance of this class,
73
// it will throw an exception as it is poentially actively inuse via child
74
// instances and destroying the parent may lead to undefined behaviour. This
75
// may only be deleted when it returns false during parent construction.
76
//
77
virtual
~XrdOssArcStopMon
();
78
79
// This class cannot be copied nor assigned as it may caue undefined behaviour
80
//
81
XrdOssArcStopMon
(
const
XrdOssArcStopMon
& other) =
delete
;
82
XrdOssArcStopMon
&
operator=
(
const
XrdOssArcStopMon
&) =
delete
;
83
private
:
84
85
XrdSysXSLock
& xsLock;
86
const
char
* admPath;
87
int
admDirFD;
88
int
chkInterval;
89
RAtomic_bool
isActive;
90
};
91
#endif
parent
static void parent()
Definition
XrdClDefaultEnv.cc:80
XrdJob.hh
XrdSysRAtomic.hh
RAtomic_bool
XrdSys::RAtomic< bool > RAtomic_bool
Definition
XrdSysRAtomic.hh:323
XrdSysXSLock.hh
xs_Shared
@ xs_Shared
Definition
XrdSysXSLock.hh:38
XrdJob::XrdJob
XrdJob(const char *desc="")
Definition
XrdJob.hh:51
XrdOssArcStopMon::~XrdOssArcStopMon
virtual ~XrdOssArcStopMon()
Definition
XrdOssArcStopMon.cc:103
XrdOssArcStopMon::XrdOssArcStopMon
XrdOssArcStopMon(const XrdOssArcStopMon &other)=delete
XrdOssArcStopMon::Activate
void Activate()
Definition
XrdOssArcStopMon.hh:53
XrdOssArcStopMon::XrdOssArcStopMon
XrdOssArcStopMon(const char *apath, int chkT, bool &aOK)
Definition
XrdOssArcStopMon.cc:65
XrdOssArcStopMon::operator=
XrdOssArcStopMon & operator=(const XrdOssArcStopMon &)=delete
XrdOssArcStopMon::DoIt
virtual void DoIt() override
Definition
XrdOssArcStopMon.cc:123
XrdOssArcStopMon::XrdOssArcStopMon
XrdOssArcStopMon(XrdOssArcStopMon *parent)
Definition
XrdOssArcStopMon.hh:68
XrdOssArcStopMon::Deactivate
void Deactivate()
Definition
XrdOssArcStopMon.hh:57
XrdSysXSLock
Definition
XrdSysXSLock.hh:45
XrdOssArc
XrdOssArcStopMon.hh
Generated by
1.16.1