From 9829d84392722e5967afbbe1555c3e8518b128a2 Mon Sep 17 00:00:00 2001 From: "thilo.boehm" Date: Wed, 30 Jan 2008 12:12:30 +0000 Subject: [PATCH] BUG#: 6571 TITLE: Change OpenPegasus asserts with z/OS abends DESCRIPTION: Introduce z/OS speciffic assert handling. --- src/Pegasus/Common/Makefile | 3 +- src/Pegasus/Common/PegasusAssert.h | 10 ++- src/Pegasus/Common/PegasusAssertZOS.cpp | 53 ++++++++++++ src/Pegasus/Common/PegasusAssertZOS.h | 107 ++++++++++++++++++++++++ 4 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 src/Pegasus/Common/PegasusAssertZOS.cpp create mode 100644 src/Pegasus/Common/PegasusAssertZOS.h diff --git a/src/Pegasus/Common/Makefile b/src/Pegasus/Common/Makefile index 344210028..0362edfeb 100644 --- a/src/Pegasus/Common/Makefile +++ b/src/Pegasus/Common/Makefile @@ -220,7 +220,8 @@ ifeq ($(PEGASUS_PLATFORM),ZOS_ZSERIES_IBM) ifdef PEGASUS_ZOS_SECURITY SOURCES += $(SOURCES_SECURITY_ZOS) endif - SOURCES2 += Audit_zOS_SMF.cpp + SOURCES2 += Audit_zOS_SMF.cpp \ + PegasusAssertZOS.cpp endif ifeq ($(PEGASUS_PLATFORM),AIX_RS_IBMCXX) diff --git a/src/Pegasus/Common/PegasusAssert.h b/src/Pegasus/Common/PegasusAssert.h index fc23f6b88..b74137234 100644 --- a/src/Pegasus/Common/PegasusAssert.h +++ b/src/Pegasus/Common/PegasusAssert.h @@ -33,9 +33,17 @@ #ifndef Pegasus_Assert_h #define Pegasus_Assert_h +#ifdef PEGASUS_OS_ZOS + // zOS specific implementation of assert macros. +# include +#else // NOTE: // +// This is the common implementation for the assert macros. +// If platform specific implementation are needed they have to +// be placed in a platform specific include file and included before. +// // All built and tested OK with // but is more appropriate for c++ files // however if this should be a problem for any c fileswithin the tree @@ -97,5 +105,5 @@ } \ } while (0) - +# endif /* Common Pegasus Assert implementation */ #endif /* Pegasus_Assert_h */ diff --git a/src/Pegasus/Common/PegasusAssertZOS.cpp b/src/Pegasus/Common/PegasusAssertZOS.cpp new file mode 100644 index 000000000..ee8e1c38a --- /dev/null +++ b/src/Pegasus/Common/PegasusAssertZOS.cpp @@ -0,0 +1,53 @@ +//%2006//////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development +// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. +// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; +// IBM Corp.; EMC Corporation, The Open Group. +// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; +// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. +// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; +// EMC Corporation; VERITAS Software Corporation; The Open Group. +// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; +// EMC Corporation; Symantec Corporation; The Open Group. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN +// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED +// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//============================================================================== +// +//%///////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include + +void __pegasus_assert_zOS(const char* file, int line, const char* cond) +{ + // a buffer to compose the messages + char msgBuffer[1024]; + + sprintf(msgBuffer,"PEGASUS_ASSERT: Assertation \'%s\' failed",cond); + fprintf(stderr,"\n%s in file %s ,line %d\n",msgBuffer,file,line); + + // generate stacktace + ctrace(msgBuffer); + // If env vars are set, a SYSM dump is generated. + kill(getpid(),SIGDUMP); +} + + diff --git a/src/Pegasus/Common/PegasusAssertZOS.h b/src/Pegasus/Common/PegasusAssertZOS.h new file mode 100644 index 000000000..baa8d4263 --- /dev/null +++ b/src/Pegasus/Common/PegasusAssertZOS.h @@ -0,0 +1,107 @@ +//%2006//////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development +// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. +// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; +// IBM Corp.; EMC Corporation, The Open Group. +// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; +// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. +// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; +// EMC Corporation; VERITAS Software Corporation; The Open Group. +// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; +// EMC Corporation; Symantec Corporation; The Open Group. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN +// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED +// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//============================================================================== +// +//%///////////////////////////////////////////////////////////////////////////// +#ifndef Pegasus_Assert_ZOS_h +#define Pegasus_Assert_ZOS_h + +#include +#include + +/* + This function is executing a number of assertaion task. + In differnet to the standard assert() function, + this function does not abort the server! + + 1) Print a statement to stderr + 2) Create a stack trace + 3) Create a system dump + +*/ + +void __pegasus_assert_zOS(const char* file, int line, const char* cond); + +/* + Define PEGASUS_ASSERT assertion statement. This statement tests the + condition defined by the parameters and if not True executes an number + of tasks. +*/ + +# define PEGASUS_ASSERT(COND) \ + do \ + { \ + if (!(COND)) \ + { \ + __pegasus_assert_zOS( __FILE__, __LINE__, #COND ); \ + } \ + } while (0); + +/* + Define PEGASUS_DEBUG_ASSERT assertion statement. + It only generates code if PEGASUS_DEBUG is defined + This statement tests the condition defined by the parameters and + if not True executes an number of tasks and abort the server ! +*/ + +#ifdef PEGASUS_DEBUG +# define PEGASUS_DEBUG_ASSERT(COND) \ + do \ + { \ + if (!(COND)) \ + { \ + fprintf(stderr, \ + "\nPEGASUS_DEBUG_ASSERT: Assertation \'%s\' failed " \ + "in file %s ,line %d\n",#COND,__FILE__,__LINE__); \ + ctrace("PEGASUS_DEBUG_ASSERT: Assertation \'" \ + #COND"\' failed."); \ + kill(getpid(),SIGDUMP); \ + abort(); \ + } \ + } while (0); +#else +# define PEGASUS_DEBUG_ASSERT(COND) +#endif + +#define PEGASUS_TEST_ASSERT(COND) \ + do \ + { \ + if (!(COND)) \ + { \ + fprintf(stderr, \ + "\nPEGASUS_TEST_ASSERT: Assertation \'%s\' failed " \ + "in file %s ,line %d\n",#COND,__FILE__,__LINE__); \ + ctrace("PEGASUS_TEST_ASSERT: Assertation \'" \ + #COND"\' failed."); \ + kill(getpid(),SIGDUMP); \ + abort(); \ + } \ + } while (0); +#endif /* Pegasus_Assert_ZOS_h */ -- 2.34.1