00001 /* 00002 * Copyright 1999-2006 by Codemesh, Inc. ALL RIGHTS RESERVED. 00003 */ 00004 00005 #ifndef xmogLockHolder_inc 00006 #define xmogLockHolder_inc 00007 00008 00009 #include "xmog_base.h" 00010 #include "xmog_java_ref.h" 00011 #include "xmog_java_class.h" 00012 00013 00047 class xmog_lock_holder 00048 { 00049 private: 00050 00051 xmog_java_ref & toLock_; 00052 00053 int holding_; 00054 00055 xmog_lock_holder( const xmog_lock_holder & ); 00056 xmog_lock_holder & operator = ( const xmog_lock_holder & ); 00057 00058 public: 00059 00063 xmog_lock_holder( xmog_java_ref & _toLock ) : 00064 toLock_( _toLock ), 00065 holding_( 0 ) 00066 { 00067 try 00068 { 00069 # if !defined(XMOG_NULL_NAME) 00070 if( toLock_ != null ) 00071 { 00072 toLock_.xmog_monitor_enter(); 00073 holding_ = 1; 00074 } 00075 # else 00076 if( toLock_ != XMOG_NULL_NAME ) 00077 { 00078 toLock_.xmog_monitor_enter(); 00079 holding_ = 1; 00080 } 00081 # endif 00082 } 00083 catch( xmog_exception & ) 00084 { 00085 throw; 00086 } 00087 } 00088 00092 ~xmog_lock_holder() 00093 { 00094 if( holding_ ) 00095 { 00096 toLock_.xmog_monitor_exit(); 00097 } 00098 } 00099 }; 00100 00101 00102 #endif /* xmogLockHolder_inc */
1.4.1