Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

RWLock Class Reference

#include <RWLock.hpp>

List of all members.

Public Methods

__inline RWLock ()
virtual __inline ~RWLock ()
void read ()
void write ()
void releaseRead ()
void releaseWrite ()

Private Methods

__inline RWLock (const RWLock &src)
__inline const RWLock & operator= (const RWLock &src)

Private Attributes

long readers
int readfail
int writefail
int loop
Mutex mutex


Constructor & Destructor Documentation

__inline RWLock::RWLock  
 

Definition at line 15 of file RWLock.inl.

00016   : readers( 0 ), readfail( 0 ), writefail( 0 ), loop( 0 ) { }

__inline RWLock::~RWLock   [virtual]
 

Definition at line 18 of file RWLock.inl.

00018 { }

__inline RWLock::RWLock const RWLock &    src [private]
 


Member Function Documentation

__inline const RWLock& RWLock::operator= const RWLock &    src [private]
 

void RWLock::read  
 

Definition at line 15 of file RWLock.cpp.

Referenced by TFTP_Option::build_OptionPacket(), TFTP_Option::build_RRQ_WRQ_TemplatePacket(), TFTP_Option::getBlockSize(), TFTP_Option::getBlockSizeValue(), TFTP_Option::getFileName(), TFTP_Option::getFileSize(), TFTP_Option::getMode(), TFTP_Option::getTimeOut(), TFTP_Option::getTimeOutValue(), TFTP_Option::getWindowSize(), TFTP_Option::getWindowSizeValue(), TFTP_OptionSaved::load(), TFTP_Option::openFile(), and Reader::run().

00015                    {
00016    readfail = 1;
00017    do {
00018      if ( loop ) sched_yield();
00019      loop = 1;
00020      mutex.lock();
00021      if ( readers >= 0 ) {
00022        readers++;
00023        readfail = 0;
00024      }
00025      mutex.unlock();
00026    } while( readfail );
00027  }

void RWLock::releaseRead  
 

Definition at line 29 of file RWLock.cpp.

Referenced by TFTP_Option::build_OptionPacket(), TFTP_Option::build_RRQ_WRQ_TemplatePacket(), TFTP_Option::getBlockSize(), TFTP_Option::getBlockSizeValue(), TFTP_Option::getFileName(), TFTP_Option::getFileSize(), TFTP_Option::getMode(), TFTP_Option::getTimeOut(), TFTP_Option::getTimeOutValue(), TFTP_Option::getWindowSize(), TFTP_Option::getWindowSizeValue(), TFTP_OptionSaved::load(), TFTP_Option::openFile(), and Reader::run().

00029                           {
00030    mutex.lock();
00031    if ( readers >= 0 ) {
00032      readers--;
00033    }   
00034    mutex.unlock();
00035  }

void RWLock::releaseWrite  
 

Definition at line 37 of file RWLock.cpp.

Referenced by TFTP_Option::TFTP_Option(), TFTP_Option::build_OptionPacket(), TFTP_Option::build_RRQ_WRQ_TemplatePacket(), TFTP_Option::createSocket(), TFTP_Option::openFile(), Fred::run(), TFTP_OptionSaved::save(), TFTP_Option::setBlockSize(), TFTP_Option::setFileName(), TFTP_Option::setFileSize(), TFTP_Option::setHostName(), TFTP_Option::setMode(), TFTP_Option::setPort(), TFTP_Option::setTimeOut(), TFTP_Option::setWindowSize(), and TFTP_Option::~TFTP_Option().

00037                            {
00038    mutex.lock();
00039    if ( readers < 0 ) {
00040      readers = 0;
00041    }   
00042    mutex.unlock();
00043  }

void RWLock::write  
 

Definition at line 45 of file RWLock.cpp.

Referenced by TFTP_Option::TFTP_Option(), TFTP_Option::build_OptionPacket(), TFTP_Option::build_RRQ_WRQ_TemplatePacket(), TFTP_Option::createSocket(), TFTP_Option::openFile(), Fred::run(), TFTP_OptionSaved::save(), TFTP_Option::setBlockSize(), TFTP_Option::setFileName(), TFTP_Option::setFileSize(), TFTP_Option::setHostName(), TFTP_Option::setMode(), TFTP_Option::setPort(), TFTP_Option::setTimeOut(), TFTP_Option::setWindowSize(), and TFTP_Option::~TFTP_Option().

00045                     {
00046    writefail = 1;
00047    do {
00048      if ( loop ) sched_yield();
00049      loop = 1;
00050      mutex.lock();
00051      if ( readers == 0 ) {
00052        readers   = -1;
00053        writefail = 0;
00054      }
00055      mutex.unlock();     
00056    } while( writefail );   
00057  }


Member Data Documentation

int RWLock::loop [private]
 

Definition at line 38 of file RWLock.hpp.

Mutex RWLock::mutex [private]
 

Definition at line 40 of file RWLock.hpp.

long RWLock::readers [private]
 

Definition at line 34 of file RWLock.hpp.

int RWLock::readfail [private]
 

Definition at line 36 of file RWLock.hpp.

int RWLock::writefail [private]
 

Definition at line 37 of file RWLock.hpp.


The documentation for this class was generated from the following files:
Generated on Sun Oct 14 18:49:36 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001