XRootD
Loading...
Searching...
No Matches
XrdXrootdFileLock1 Class Reference

#include <XrdXrootdFileLock1.hh>

+ Inheritance diagram for XrdXrootdFileLock1:
+ Collaboration diagram for XrdXrootdFileLock1:

Public Member Functions

 XrdXrootdFileLock1 ()
 
 ~XrdXrootdFileLock1 ()
 
int Lock (const char *path, char mode, bool force)
 
void numLocks (const char *path, int &rcnt, int &wcnt)
 
int Unlock (const char *path, char mode)
 

Detailed Description

Definition at line 38 of file XrdXrootdFileLock1.hh.

Constructor & Destructor Documentation

◆ XrdXrootdFileLock1()

XrdXrootdFileLock1::XrdXrootdFileLock1 ( )
inline

Definition at line 48 of file XrdXrootdFileLock1.hh.

48{}

◆ ~XrdXrootdFileLock1()

XrdXrootdFileLock1::~XrdXrootdFileLock1 ( )
inline

Definition at line 49 of file XrdXrootdFileLock1.hh.

49{} // This object is never destroyed!

Member Function Documentation

◆ Lock()

int XrdXrootdFileLock1::Lock ( const char * path,
char mode,
bool force )
virtual

Implements XrdXrootdFileLock.

Definition at line 80 of file XrdXrootdFileLock1.cc.

81{
82 XrdXrootdLockFileLock locker(&LTMutex);
83 XrdXrootdFileLockInfo *lp;
84
85// See if we already have a lock on this file
86//
87 if ((lp = XrdXrootdLockTable.Find(path)))
88 {if (mode == 'r')
89 {if (lp->numWriters && !force)
90 return -lp->numWriters;
91 lp->numReaders++;
92 } else {
93 if ((lp->numReaders || lp->numWriters) && !force)
94 return (lp->numWriters ? -lp->numWriters : lp->numReaders);
95 lp->numWriters++;
96 }
97 return 0;
98 }
99
100// Item does not exist, add it to the table
101//
102 XrdXrootdLockTable.Add(path, new XrdXrootdFileLockInfo(mode));
103 return 0;
104}
XrdOucHash< XrdXrootdFileLockInfo > XrdXrootdLockTable

References XrdXrootdFileLockInfo::numReaders, XrdXrootdFileLockInfo::numWriters, and XrdXrootdLockTable.

◆ numLocks()

void XrdXrootdFileLock1::numLocks ( const char * path,
int & rcnt,
int & wcnt )
virtual

Implements XrdXrootdFileLock.

Definition at line 112 of file XrdXrootdFileLock1.cc.

113{
114 XrdXrootdLockFileLock locker(&LTMutex);
115 XrdXrootdFileLockInfo *lp;
116
117 if (!(lp = XrdXrootdLockTable.Find(path))) rcnt = wcnt = 0;
118 else {rcnt = lp->numReaders; wcnt = lp->numWriters;}
119}

References XrdXrootdFileLockInfo::numReaders, XrdXrootdFileLockInfo::numWriters, and XrdXrootdLockTable.

◆ Unlock()

int XrdXrootdFileLock1::Unlock ( const char * path,
char mode )
virtual

Implements XrdXrootdFileLock.

Definition at line 125 of file XrdXrootdFileLock1.cc.

126{
127 XrdXrootdLockFileLock locker(&LTMutex);
128 XrdXrootdFileLockInfo *lp;
129
130// See if we already have a lock on this file
131//
132 if (!(lp = XrdXrootdLockTable.Find(path))) return 1;
133
134// Adjust the lock information
135//
136 if (mode == 'r')
137 {if (lp->numReaders == 0) return 1;
138 lp->numReaders--;
139 } else {
140 if (lp->numWriters == 0) return 1;
141 lp->numWriters--;
142 }
143
144// Delete the entry if we no longer need it
145//
146 if (lp->numReaders == 0 && lp->numWriters == 0)
147 XrdXrootdLockTable.Del(path);
148 return 0;
149}

References XrdXrootdFileLockInfo::numReaders, XrdXrootdFileLockInfo::numWriters, and XrdXrootdLockTable.


The documentation for this class was generated from the following files: