Browse Source

express: Fix Datagram::modify_array()

This just copies the array initialization out of append_data, so a
COW/uninitialized Datagram can be initialized with modify_array()
Sam Edwards 7 years ago
parent
commit
10f1ffa9a7
1 changed files with 11 additions and 0 deletions
  1. 11 0
      panda/src/express/datagram.I

+ 11 - 0
panda/src/express/datagram.I

@@ -408,6 +408,17 @@ get_array() const {
  */
  */
 INLINE PTA_uchar Datagram::
 INLINE PTA_uchar Datagram::
 modify_array() {
 modify_array() {
+  if (_data == (uchar *)NULL) {
+    // Create a new array.
+    _data = PTA_uchar::empty_array(0);
+
+  } else if (_data.get_ref_count() != 1) {
+    // Copy on write.
+    PTA_uchar new_data = PTA_uchar::empty_array(0);
+    new_data.v() = _data.v();
+    _data = new_data;
+  }
+
   return _data;
   return _data;
 }
 }