$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r86156 - in trunk/libs/serialization: doc src test vc7ide
From: ramey_at_[hidden]
Date: 2013-10-03 20:36:37
Author: ramey
Date: 2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)
New Revision: 86156
URL: http://svn.boost.org/trac/boost/changeset/86156
Log:
fixed memory leak on load_object_ptr and other changes
Deleted:
   trunk/libs/serialization/vc7ide/
Text files modified: 
   trunk/libs/serialization/doc/archive_reference.html   |     6 +-                                      
   trunk/libs/serialization/src/basic_iarchive.cpp       |     2                                         
   trunk/libs/serialization/src/basic_serializer_map.cpp |     5 +-                                      
   trunk/libs/serialization/test/B.hpp                   |     1                                         
   trunk/libs/serialization/test/test_delete_pointer.cpp |    67 ++++++++++++++++++--------------------- 
   trunk/libs/serialization/test/test_tools.hpp          |     4 +-                                      
   6 files changed, 41 insertions(+), 44 deletions(-)
Modified: trunk/libs/serialization/doc/archive_reference.html
==============================================================================
--- trunk/libs/serialization/doc/archive_reference.html	Thu Oct  3 20:26:49 2013	(r86155)
+++ trunk/libs/serialization/doc/archive_reference.html	2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)	(r86156)
@@ -57,7 +57,7 @@
     // serialization library
     typedef boost::mpl::bool_<true> is_saving; 
     typedef boost::mpl::bool_<false> is_loading;
-    template<class T> register_type(){}
+    template<class T> void register_type(){}
     template<class T> trivial_oarchive & operator<<(const T & t){
         return *this;
     }
@@ -140,7 +140,7 @@
 
 <dl>
 
-<dt><h4><code>void save_start()</code></h4></dt>
+<dt><h4><code>void save_start(char const *)</code></h4></dt>
 <dd>
 <strong>Default</strong>:Does nothing.<br>
 <strong>Purpose</strong>:To inject/retrieve an object name into the archive.  Used
@@ -148,7 +148,7 @@
 </dd>
 <p>
 
-<dt><h4><code>void save_end()</code></h4></dt>
+<dt><h4><code>void save_end(char const *)</code></h4></dt>
 <dd>
 <strong>Default</strong>:Does nothing.<br>
 <strong>Purpose</strong>:To inject/retrieve an object name into the archive. Used
Modified: trunk/libs/serialization/src/basic_iarchive.cpp
==============================================================================
--- trunk/libs/serialization/src/basic_iarchive.cpp	Thu Oct  3 20:26:49 2013	(r86155)
+++ trunk/libs/serialization/src/basic_iarchive.cpp	2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)	(r86156)
@@ -453,9 +453,9 @@
         }
         BOOST_ASSERT(NULL != bpis_ptr);
         class_id_type new_cid = register_type(bpis_ptr->get_basic_serializer());
+        BOOST_VERIFY(register_type(bpis_ptr->get_basic_serializer()) == cid);
         int i = cid;
         cobject_id_vector[i].bpis_ptr = bpis_ptr;
-        BOOST_ASSERT(new_cid == cid);
     }
     int i = cid;
     cobject_id & co = cobject_id_vector[i];
Modified: trunk/libs/serialization/src/basic_serializer_map.cpp
==============================================================================
--- trunk/libs/serialization/src/basic_serializer_map.cpp	Thu Oct  3 20:26:49 2013	(r86155)
+++ trunk/libs/serialization/src/basic_serializer_map.cpp	2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)	(r86156)
@@ -43,11 +43,12 @@
 BOOST_ARCHIVE_DECL(bool) 
 basic_serializer_map::insert(const basic_serializer * bs){
     // attempt to insert serializer into it's map
-    const std::pair<map_type::iterator, bool> result =
-        m_map.insert(bs);
     // the following is commented out - rather than being just
     // deleted as a reminder not to try this.
 
+    // const std::pair<map_type::iterator, bool> result =
+        m_map.insert(bs);
+
     // At first it seemed like a good idea.  It enforced the
     // idea that a type be exported from at most one code module
     // (DLL or mainline).  This would enforce a "one definition rule" 
Modified: trunk/libs/serialization/test/B.hpp
==============================================================================
--- trunk/libs/serialization/test/B.hpp	Thu Oct  3 20:26:49 2013	(r86155)
+++ trunk/libs/serialization/test/B.hpp	2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)	(r86156)
@@ -67,6 +67,7 @@
             ar >> BOOST_SERIALIZATION_NVP(v);
             ar >> BOOST_SERIALIZATION_NVP(w);
             ar >> BOOST_SERIALIZATION_NVP(x);
+            break;
         default:
             break;
         }
Modified: trunk/libs/serialization/test/test_delete_pointer.cpp
==============================================================================
--- trunk/libs/serialization/test/test_delete_pointer.cpp	Thu Oct  3 20:26:49 2013	(r86155)
+++ trunk/libs/serialization/test/test_delete_pointer.cpp	2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)	(r86156)
@@ -24,7 +24,6 @@
 
 #include <boost/serialization/nvp.hpp>
 #include <boost/serialization/split_member.hpp>
-#include <boost/serialization/vector.hpp>
 
 //A holds a pointer to another A, but doesn't own the pointer.
 //objCount
@@ -41,89 +40,85 @@
     {
         static int i = 0;
         ar >> BOOST_SERIALIZATION_NVP(next_);
-        if(++i == 3)
-            boost::serialization::throw_exception(boost::archive::archive_exception(
-                boost::archive::archive_exception::no_exception
-            ));
+        //if(++i == 3)
+        //    boost::serialization::throw_exception(boost::archive::archive_exception(
+        //        boost::archive::archive_exception::no_exception
+        //    ));
+        ++loadcount;
     }
     BOOST_SERIALIZATION_SPLIT_MEMBER()
 public:
     A()
     {
+        if(test && objcount == 3)
+            boost::serialization::throw_exception(boost::archive::archive_exception(
+                boost::archive::archive_exception::no_exception
+            ));
         next_ = 0;
         ++objcount;
     }
-    A(const A& a)
-    {
-        next_ = a.next_; ++objcount;
-    }
-    ~A()
-    {
+    ~A(){
+        delete next_;
         --objcount;
     }
     A* next_;
     static int objcount;
+    static bool test;
+    static int loadcount;
 };
 
 
 int A::objcount = 0;
+int A::loadcount = 0;
+bool A::test = false;
 
 int
 test_main( int /* argc */, char* /* argv */[] )
 {
-    std::vector<A*> vec;
-    A* a = new A;
-    a->next_ = 0;
-    vec.push_back(a);
 
     //fill the vector with chained A's. The vector is assumed
     //to own the objects - we will destroy the objects through this vector.
+
+    A * head = new A;
+    A* last = head;
     unsigned int i;
-    for(i   = 1; i < 10; ++i)
+    for(i = 1; i < 9; ++i)
     {
-        a = new A;
-        vec[i - 1]->next_ = a;
-        a->next_ = 0;
-        vec.push_back(a);
+        A *a = new A;
+        last->next_ = a;
+        last = a;
     }
 
     const char * testfile = boost::archive::tmpnam(0);
     BOOST_REQUIRE(NULL != testfile);
 
-    //output the vector
+    //output the list
     {
         test_ostream os(testfile, TEST_STREAM_FLAGS);
         test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
-        oa << BOOST_SERIALIZATION_NVP(vec);
+        oa << BOOST_SERIALIZATION_NVP(head);
     }
 
-    //erase the objects
-    for(i = 0; i < vec.size(); ++i)
-        delete vec[i];
-    vec.clear();
+    delete head;
+    BOOST_CHECK(A::objcount == 0);
 
-    //read the vector back
+    head = NULL;
+    A::test = true;
+    //read the list back
     {
         test_istream is(testfile, TEST_STREAM_FLAGS);
         test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
         BOOST_TRY {
-            ia >> BOOST_SERIALIZATION_NVP(vec);
+            ia >> BOOST_SERIALIZATION_NVP(head);
         }
         BOOST_CATCH (...){
             ia.delete_created_pointers();
-            vec.clear();
         }
         BOOST_CATCH_END
     }
 
-    //delete the objects
-    for(i = 0; i < vec.size(); ++i)
-        delete vec[i];
-    vec.clear();
-
     //identify the leaks
-    BOOST_CHECK(A::objcount == 0);
+    BOOST_CHECK(A::loadcount == 0);
     std::remove(testfile);
     return EXIT_SUCCESS;
 }
-
Modified: trunk/libs/serialization/test/test_tools.hpp
==============================================================================
--- trunk/libs/serialization/test/test_tools.hpp	Thu Oct  3 20:26:49 2013	(r86155)
+++ trunk/libs/serialization/test/test_tools.hpp	2013-10-03 20:36:37 EDT (Thu, 03 Oct 2013)	(r86156)
@@ -63,9 +63,9 @@
 #include <direct.h>
 #include <boost/archive/tmpdir.hpp>
 
-#if defined(__COMO__)
+//#if defined(__COMO__)
     #define chdir _chdir
-#endif
+//#endif  // defined win32
 
 #if defined(NDEBUG) && defined(__BORLANDC__)
     #define STRCPY strcpy