diff options
Diffstat (limited to 'TAO/tao/poa_macros.h')
-rw-r--r-- | TAO/tao/poa_macros.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/TAO/tao/poa_macros.h b/TAO/tao/poa_macros.h new file mode 100644 index 00000000000..b46ae1a10f8 --- /dev/null +++ b/TAO/tao/poa_macros.h @@ -0,0 +1,47 @@ +// Convenient macro for testing for deadlock, as well as for detecting +// when mutexes fail. +#define TAO_POA_WRITE_GUARD(MUTEX,OBJ,LOCK,ENV) \ + do { \ + ACE_Write_Guard<MUTEX> OBJ (LOCK); \ + if (OBJ.locked () == 0) \ + { \ + CORBA::Exception *exception = new CORBA::OBJ_ADAPTER (CORBA::COMPLETED_NO); \ + ENV.exception (exception); \ + return; \ + } \ + } \ + while (0); +#define TAO_POA_READ_GUARD(MUTEX,OBJ,LOCK,ENV) \ + do { \ + ACE_Read_Guard<MUTEX> OBJ (LOCK); \ + if (OBJ.locked () == 0) \ + { \ + CORBA::Exception *exception = new CORBA::OBJ_ADAPTER (CORBA::COMPLETED_NO); \ + ENV.exception (exception); \ + return; \ + } \ + } \ + while (0); +#define TAO_POA_WRITE_GUARD_RETURN(MUTEX,OBJ,LOCK,RETURN,ENV) \ + do { \ + ACE_Write_Guard<MUTEX> OBJ (LOCK); \ + if (OBJ.locked () == 0) \ + { \ + CORBA::Exception *exception = new CORBA::OBJ_ADAPTER (CORBA::COMPLETED_NO); \ + ENV.exception (exception); \ + return RETURN; \ + } \ + } \ + while (0); +#define TAO_POA_READ_GUARD_RETURN(MUTEX,OBJ,LOCK,RETURN,ENV) \ + do { \ + ACE_Read_Guard<MUTEX> OBJ (LOCK); \ + if (OBJ.locked () == 0) \ + { \ + CORBA::Exception *exception = new CORBA::OBJ_ADAPTER (CORBA::COMPLETED_NO); \ + ENV.exception (exception); \ + return RETURN; \ + } \ + } \ + while (0); + |