From: Felix Domke Date: Thu, 26 Jan 2006 12:56:09 +0000 (+0000) Subject: (controlled) SEGFAULT on assert, in order to allow debugging with core files X-Git-Tag: 2.6.0~4278 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/cceb3c9e6ec5c92240f592e3a435ca25ce1facca (controlled) SEGFAULT on assert, in order to allow debugging with core files --- diff --git a/lib/base/smartptr.h b/lib/base/smartptr.h index 814d7457..6c3dbc2f 100644 --- a/lib/base/smartptr.h +++ b/lib/base/smartptr.h @@ -5,6 +5,8 @@ #include #include +inline void ptrAssert(void *p) { if (!p) *(unsigned long*)0=0; } + template class ePtr { @@ -54,7 +56,7 @@ public: T* grabRef() { if (!ptr) return 0; ptr->AddRef(); return ptr; } T* &ptrref() { assert(!ptr); return ptr; } - T* operator->() const { assert(ptr); return ptr; } + T* operator->() const { ptrAssert(ptr); return ptr; } operator T*() const { return this->ptr; } operator bool() const { return !!this->ptr; } @@ -131,7 +133,7 @@ public: T* grabRef() { if (!ptr) return 0; ptr->AddRef(); ptr->AddUse(); return ptr; } T* &ptrref() { assert(!ptr); return ptr; } - T* operator->() const { assert(ptr); return ptr; } + T* operator->() const { ptrAssert(ptr); return ptr; } operator T*() const { return this->ptr; } }; @@ -179,13 +181,13 @@ public: } - ePtrHelper operator->() { assert(ptr); return ePtrHelper(ptr); } + ePtrHelper operator->() { ptrAssert(ptr); return ePtrHelper(ptr); } /* for const objects, we don't need the helper, as they can't */ /* be changed outside the program flow. at least this is */ /* what the compiler assumes, so in case you're using const */ /* eMutablePtrs note that they have to be const. */ - const T* operator->() const { assert(ptr); return ptr; } + const T* operator->() const { ptrAssert(ptr); return ptr; } }; #endif