123456789101112131415161718192021222324252627282930313233 |
- #include "ysafeptr.h"
- #ifdef CHECK_YPTR2
- Y_POD_THREAD(bool)
- IObjectBase::DisableThreadCheck;
- #endif
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- void IObjectBase::ReleaseObjComplete(int nMask) {
- if ((ObjData & 0x3fffffff) == 0 && RefData == 0) {
- assert((ObjData & 0x40000000) == 0); // object not being invalidated
- delete this;
- } else if ((ObjData & nMask) == 0) {
- if (ObjData & 0x40000000) {
- // object is already being invalidated
- // possible when no CObj left and object is invalidated and during this all CMObj are also out
- return;
- }
- ObjData |= 0xc0000000;
- AddRef();
- DestroyContents();
- assert((ObjData & nMask) == 0); // otherwise empty constructor is adding CObjs on self
- ObjData &= ~0x40000000;
- ReleaseRef();
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- void IObjectBase::ReleaseRefComplete() {
- assert(RefData == 0);
- if ((ObjData & 0x3fffffff) == 0) {
- assert((ObjData & 0x40000000) == 0); // object not being invalidated
- delete this;
- }
- }
|