XRootD
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);
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);
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);
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: