From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 4 Sep 2007 21:28:06 -0000 Subject: [Cluster-devel] conga/ricci/include counting_auto_ptr.cpp coun ... Message-ID: <20070904212806.20823.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe at sourceware.org 2007-09-04 21:28:05 Modified files: ricci/include : counting_auto_ptr.cpp counting_auto_ptr.h Log message: More debugging, make the refcounter an int * again Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 --- conga/ricci/include/counting_auto_ptr.cpp 2007/09/04 18:43:26 1.4 +++ conga/ricci/include/counting_auto_ptr.cpp 2007/09/04 21:28:05 1.5 @@ -28,12 +28,18 @@ counting_auto_ptr::counting_auto_ptr(X* ptr) : _ptr(ptr) { - _counter = 1; + try { + _counter = new int(1); + } catch ( ... ) { + delete _ptr; + throw; + } try { _mutex = new Mutex(); } catch ( ... ) { delete _ptr; + delete _counter; throw; } }; @@ -45,7 +51,7 @@ _ptr = o._ptr; _mutex = o._mutex; _counter = o._counter; - _counter++; + (*_counter)++; }; template @@ -58,7 +64,7 @@ _ptr = o._ptr; _mutex = o._mutex; _counter = o._counter; - _counter++; + (*_counter)++; } return *this; }; @@ -76,10 +82,14 @@ bool last = false; { MutexLocker l(*_mutex); - last = (--_counter == 0); + last = (--(*_counter) == 0); + if (*_counter < 0) + throw int(); } if (last) { + delete _counter; + _counter = NULL; delete _ptr; _ptr = NULL; delete _mutex; @@ -102,6 +112,9 @@ X* counting_auto_ptr::operator->() const { +#ifdef DEBUG + assert(_ptr != NULL); +#endif return _ptr; }; --- conga/ricci/include/counting_auto_ptr.h 2007/09/04 18:30:46 1.3 +++ conga/ricci/include/counting_auto_ptr.h 2007/09/04 21:28:05 1.4 @@ -47,7 +47,7 @@ private: X* _ptr; Mutex* _mutex; - int _counter; + int *_counter; void decrease_counter(); };