gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog libamf/element.cpp libnet/cque....


From: Rob Savoye
Subject: [Gnash-commit] gnash ChangeLog libamf/element.cpp libnet/cque....
Date: Mon, 07 Apr 2008 19:35:11 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Rob Savoye <rsavoye>    08/04/07 19:35:11

Modified files:
        .              : ChangeLog 
        libamf         : element.cpp 
        libnet         : cque.cpp 
        testsuite/libnet.all: test_cque.cpp 

Log message:
                * libnet/cque.cpp: Only delete the pointer if we actually have
                data. Handle merging differently to eliminate problem with
                singular interators. Not this fixes the abort, but leaks memory 
as
                the original buffers aren't removed from the que like they need 
to
                be. This at least get make check working for libnet.all.
                * testsuite/libamf.all/test_sol.cpp: Don't ehck the bogus data 
for
                default camera.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6208&r2=1.6209
http://cvs.savannah.gnu.org/viewcvs/gnash/libamf/element.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/libnet/cque.cpp?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/libnet.all/test_cque.cpp?cvsroot=gnash&r1=1.3&r2=1.4

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6208
retrieving revision 1.6209
diff -u -b -r1.6208 -r1.6209
--- ChangeLog   7 Apr 2008 18:25:41 -0000       1.6208
+++ ChangeLog   7 Apr 2008 19:35:10 -0000       1.6209
@@ -1,3 +1,13 @@
+2008-04-07  Rob Savoye  <address@hidden>
+
+       * libnet/cque.cpp: Only delete the pointer if we actually have
+       data. Handle merging differently to eliminate problem with
+       singular interators. Not this fixes the abort, but leaks memory as
+       the original buffers aren't removed from the que like they need to
+       be. This at least get make check working for libnet.all.
+       * testsuite/libamf.all/test_sol.cpp: Don't ehck the bogus data for
+       default camera.
+
 2008-04-07 Sandro Santilli <address@hidden>
 
         * server/as_object.cpp (add_property): invoke the watch trigger

Index: libamf/element.cpp
===================================================================
RCS file: /sources/gnash/gnash/libamf/element.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- libamf/element.cpp  6 Apr 2008 18:11:34 -0000       1.16
+++ libamf/element.cpp  7 Apr 2008 19:35:11 -0000       1.17
@@ -74,11 +74,11 @@
 Element::~Element()
 {
 //    GNASH_REPORT_FUNCTION;
-//     if (_buffer) {
-//     if (_buffer->size() > 0) {
-//         delete _buffer;
-//     }
-//     }
+    if (_buffer) {
+       if (_buffer->size() > 0) {
+           delete _buffer;
+       }
+    }
     for (size_t i=0; i< _children.size(); i++) {
        delete _children[i];
     }
@@ -668,7 +668,6 @@
       case Element::NOTYPE:
          break;
       case Element::NUMBER:
-
          cerr << to_number() << endl;
          break;
       case Element::BOOLEAN:

Index: libnet/cque.cpp
===================================================================
RCS file: /sources/gnash/gnash/libnet/cque.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- libnet/cque.cpp     7 Apr 2008 14:16:51 -0000       1.10
+++ libnet/cque.cpp     7 Apr 2008 19:35:11 -0000       1.11
@@ -57,7 +57,9 @@
     boost::mutex::scoped_lock lock(_mutex);
     for (it = _que.begin(); it != _que.end(); it++) {
        amf::Buffer *ptr = *(it);
-       delete ptr;
+       if (ptr->size()) {      // FIXME: we probably want to delete ptr anyway,
+           delete ptr;         // but if we do, this will core dump.
+       }
     }
 }
 
@@ -193,43 +195,41 @@
 // Merge sucessive buffers into one single larger buffer. This is for some
 // protocols, than have very long headers.
 amf::Buffer *
-CQue::merge(amf::Buffer *begin)
+CQue::merge(amf::Buffer *start)
 {
     GNASH_REPORT_FUNCTION;
     int totalsize = 0;
     Que::iterator it;
     vector<Que::iterator> elements; // iterators to elements to merge
-    vector<Que::iterator>::iterator eit;
+    vector<Que::iterator>::const_iterator eit;
+    Network::byte_t *ptr;
+    bool found = false;
 
     boost::mutex::scoped_lock lock(_mutex);
+    // Calculate how big the combined buffer needs to be. As all buffers by 
default
+    // are NETBUFSIZE, we know we're at the end of a merge because the final 
packet
+    // is less that the default.
     for (it = _que.begin(); it != _que.end(); it++) {
        amf::Buffer *ptr = *(it);
-       if (totalsize > 0) {
+       if ((ptr == start) || (found)) {
+           found = true;
+           if (ptr->size() == NETBUFSIZE) {
            totalsize += ptr->size();
-           elements.push_back(it); // add this element to the ones to merge
-           if (ptr->size() < gnash::NETBUFSIZE) {// stop merging here
-               amf::Buffer *newbuf = new amf::Buffer(totalsize);
-               Network::byte_t *tmp = newbuf->reference();
-               amf::Buffer *buf;
-//             _que.insert(elements.begin(), newbuf);
-               for (eit = elements.begin(); eit != elements.end(); eit++) {
-                   deque<amf::Buffer *>::iterator ita = *(eit);
-                   buf = *(ita);
-                   std::copy(buf->reference(), buf->reference() + buf->size(), 
tmp);
-                   tmp += buf->size();
-                   _que.erase(ita);
-               }
-               _que.push_back(newbuf);
-               return newbuf;
+               elements.push_back(it);
+           } else {            // add the last packet
+               totalsize += ptr->size();
+               elements.push_back(it);
+               break;
            }
-           continue;
        }
-       if (ptr->reference() == begin->reference()) {
-           totalsize = ptr->size();
-           elements.push_back(it);
        }
+    amf::Buffer *newbuf = new amf::Buffer(totalsize);
+
+    for (eit = elements.begin(); eit != elements.end(); eit++ ) {
+       newbuf->append(ptr);
+//     _que.erase(*eit);
     }
-    return 0;
+    return newbuf;
 }
 
 // Dump internal data.

Index: testsuite/libnet.all/test_cque.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/libnet.all/test_cque.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- testsuite/libnet.all/test_cque.cpp  6 Apr 2008 18:11:33 -0000       1.3
+++ testsuite/libnet.all/test_cque.cpp  7 Apr 2008 19:35:11 -0000       1.4
@@ -134,7 +134,7 @@
      Buffer merge1, merge2, merge3;
      size_t i;
      ptr = merge1.reference();
-     for (i=0; i< gnash::NETBUFSIZE; i++) {
+     for (i=0; i<gnash::NETBUFSIZE; i++) {
          ptr[i] = i*'A';
      }
      que.push(&merge1);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]