Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/ps/src/dsc/co/mw/mwfwk/cmwfwDoorKeeper.cc

Go to the documentation of this file.
00001 #include "cmwfwDoorKeeper.h"
00002 
00003 
00004 #define FILE "source file:cmwfwDoorKeeper.cc"
00005 #define ID "Contact Steen JENSEN, PS/CO"
00006 #define PROGRAM "Middleware server framework"
00007 #define T(a,b,c,d,e) TRACE(a,"%s(%s): %s %s %s %s\n",myname,FILE,b,c,d,e)
00008 #define E(a,b,c,d) ERROR("%s:%s(%s):ERROR: %s %s %s %s - %s\n",PROGRAM,myname,FILE,a,b,c,d,ID)
00009 
00010 
00011 
00012 
00017 cmwfwDoorKeeper::cmwfwDoorKeeper(){
00018   char* myname = "cmwfwDoorKeeper::cmwfwDoorKeeper";
00019   T(CMWFW_TRACE_CALLS,"Entering","","","");
00020 
00021   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00022   theLockObject = 0;
00023 
00024   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00025 };
00026 
00031 cmwfwDoorKeeper::~cmwfwDoorKeeper(){
00032   char* myname = "cmwfwDoorKeeper::~cmwfwDoorKeeper";
00033   T(CMWFW_TRACE_CALLS,"Entering","","","");
00034 
00035   if(theLockObject != 0){
00036 #ifdef CMWFW_WINDOWSNT
00037   cout << "!!! Error: DoorKeeper destroyed without unlocking!" << endl;
00038 //#else
00039 //  E("DoorKeeper destroyed without unlocking","","","");
00040 #endif
00041         releaseLock();
00042   };
00043 
00044   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00045 };
00046 
00051 void cmwfwDoorKeeper::getLock(){
00052   char* myname = "cmwfwDoorKeeper::getLock";
00053   T(CMWFW_TRACE_CALLS,"Entering","","","");
00054 
00055   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00056   theLockObject = new JTCSynchronized(theMonitor);
00057   if(!theLockObject)heaperr(47);
00058 
00059   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00060 };
00061 
00066 void cmwfwDoorKeeper::releaseLock(){
00067   char* myname = "cmwfwDoorKeeper::releaseLock";
00068   T(CMWFW_TRACE_CALLS,"Entering","","","");
00069 
00070   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00071   if (theLockObject == 0) {
00072 #ifdef CMWFW_WINDOWSNT
00073     cout<<"!!! Error: Release attempted when theLockObject == 0!"<<endl;
00074 #else
00075     E("Release attempted when theLockObject == 0!","","","");
00076 #endif
00077   return;
00078   };
00079   JTCSynchronized* copyOfTheLockObject = theLockObject;
00080   theLockObject = 0;
00081   delete copyOfTheLockObject;
00082 
00083   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00084 };
00085 
00090 void cmwfwDoorKeeper::wait() {
00091   char* myname = "cmwfwDoorKeeper::wait";
00092   T(CMWFW_TRACE_CALLS,"Entering","","","");
00093 
00094   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00095   JTCSynchronized* theOldLock = theLockObject;
00096   theLockObject = 0;
00097   theMonitor.wait();            
00098   theLockObject = theOldLock;
00099 
00100   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00101 };
00102 
00107 void cmwfwDoorKeeper::wait(int timeout) {
00108   char* myname = "cmwfwDoorKeeper::wait";
00109   T(CMWFW_TRACE_CALLS,"Entering","","","");
00110 
00111   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00112   JTCSynchronized* theOldLock = theLockObject;
00113   theLockObject = 0;
00114   theMonitor.wait(timeout);
00115   theLockObject = theOldLock;
00116 
00117   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00118 };
00119 
00120 
00125 void cmwfwDoorKeeper::notify() {
00126   char* myname = "cmwfwDoorKeeper::notify";
00127   T(CMWFW_TRACE_CALLS,"Entering","","","");
00128 
00129   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00130   if (theLockObject == 0)
00131 #ifdef CMWFW_WINDOWSNT
00132     cout << "Argh: notify attempted when theLockObject == 0!" << endl;
00133 #else
00134     E("Argh: notify attempted when theLockObject == 0!","","","");
00135 #endif
00136   JTCSynchronized* theOldLock = theLockObject;
00137   theLockObject = 0;
00138   theMonitor.notify();
00139   theLockObject = theOldLock;
00140 
00141   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00142 };
00143 
00148 void cmwfwDoorKeeper::notifyAll() {
00149   char* myname = "cmwfwDoorKeeper::notifyAll";
00150   T(CMWFW_TRACE_CALLS,"Entering","","","");
00151 
00152   POSSIBLE_JTC_ADOPT_CURRENT_THREAD();
00153   if (theLockObject == 0)
00154 #ifdef CMWFW_WINDOWSNT
00155     cout<<"Argh: notifyAll attempted when theLockObject == 0!"<<endl;
00156 #else
00157     E("Argh: notifyAll attempted when theLockObject == 0!","","","");
00158 #endif
00159   JTCSynchronized* theOldLock = theLockObject;
00160   theLockObject = 0;
00161   theMonitor.notifyAll();
00162   theLockObject = theOldLock;
00163 
00164   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00165 };
00166 
00167 
00168 
00169 void cmwfwDoorKeeper::heaperr(int line){
00170   char* myname = "cmwfwDoorKeeper";
00171   T(CMWFW_TRACE_CALLS,"Entering","","","");
00172 
00173   char l[30];
00174   itoa(line,l);
00175   E("Out of heap in line ",l,"","");
00176   throw cmwfwInternalError(FILE,line,"Out of heap memory");
00177   T(CMWFW_TRACE_CALLS,"Exiting due to heap allocation error","","","");
00178   exit(-1);
00179 };
00180 
00181 
00182 
00183 
00188 
00189 
00194 cmwfwDoorKeeperLock::cmwfwDoorKeeperLock(cmwfwDoorKeeper& theDoorKeeper){
00195   char* myname = "cmwfwDoorKeeperLock::cmwfwDoorKeeperLock";
00196   T(CMWFW_TRACE_CALLS,"Entering","","","");
00197 
00198   mTheDoorKeeper = &theDoorKeeper;
00199   isActivated = false;
00200 };
00201 
00206 void cmwfwDoorKeeperLock::activate(){
00207   char* myname = "cmwfwDoorKeeperLock::activate";
00208   T(CMWFW_TRACE_CALLS,"Entering","","","");
00209 
00210   mTheDoorKeeper->getLock();
00211   isActivated = true;
00212 };
00213 
00218 cmwfwDoorKeeperLock::~cmwfwDoorKeeperLock() {
00219   char* myname = "cmwfwDoorKeeperLock::~cmwfwDoorKeeperLock";
00220   T(CMWFW_TRACE_CALLS,"Entering","","","");
00221 
00222   if(isActivated == true){
00223     mTheDoorKeeper->notify();
00224     mTheDoorKeeper->releaseLock();
00225     isActivated = false;
00226   };
00227 };

Generated at Thu May 10 11:28:57 2001 for C.E.R.N.-PSControlsMiddlewareFramework by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001