This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.12 by this push:
     new 8a500fe  [To rel/0.12][IOTDB-1286] fix 4 C++ mem-leak points (#2976) 
(#3137)
8a500fe is described below

commit 8a500fe8875487091b5a1ccbba2bf7334ba8e2ba
Author: Haonan <[email protected]>
AuthorDate: Fri May 7 11:40:17 2021 +0800

    [To rel/0.12][IOTDB-1286] fix 4 C++ mem-leak points (#2976) (#3137)
    
    Co-authored-by: Jamber <[email protected]>
    Co-authored-by: haiyi.zb <[email protected]>
---
 client-cpp/src/main/Session.cpp | 11 +++++++----
 client-cpp/src/main/Session.h   | 16 ++++++++--------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/client-cpp/src/main/Session.cpp b/client-cpp/src/main/Session.cpp
index dccf784..8cc696b 100644
--- a/client-cpp/src/main/Session.cpp
+++ b/client-cpp/src/main/Session.cpp
@@ -100,7 +100,7 @@ void Tablet::reset() {
 
 void Tablet::createColumns() {
     // create timestamp column
-    timestamps = new int64_t[maxRowNumber];
+    timestamps.resize(maxRowNumber);
     // create value columns
     values.resize(schemas.size());
     for (int i = 0; i < schemas.size(); i++) {
@@ -390,13 +390,15 @@ void Session::sortTablet(Tablet& tablet) {
     }
 
     this->sortIndexByTimestamp(index, tablet.timestamps, tablet.rowSize);
-    sort(tablet.timestamps, tablet.timestamps + tablet.rowSize);
+    sort(tablet.timestamps.begin(), tablet.timestamps.begin() + 
tablet.rowSize);
     for (int i = 0; i < tablet.schemas.size(); i++) {
         tablet.values[i] = sortList(tablet.values[i], index, tablet.rowSize);
     }
+
+    delete[] index;
 }
 
-void Session::sortIndexByTimestamp(int* index, int64_t* timestamps, int 
length) {
+void Session::sortIndexByTimestamp(int* index, std::vector<int64_t>& 
timestamps, int length) {
     // Use Insert Sort Algorithm
     if (length >= 2) {
         for (int i = 1; i < length; i++) {
@@ -709,11 +711,12 @@ void Session::insertRecordsOfOneDevice(string deviceId, 
vector<int64_t>& times,
             index[i] = i;
         }
 
-        this->sortIndexByTimestamp(index, times.data(), times.size());
+        this->sortIndexByTimestamp(index, times, times.size());
         sort(times.begin(), times.end());
         measurementsList = sortList(measurementsList, index, times.size());
         typesList = sortList(typesList, index, times.size());
         valuesList = sortList(valuesList, index, times.size());
+        delete[] index;
     }
     unique_ptr<TSInsertRecordsOfOneDeviceReq> request(new 
TSInsertRecordsOfOneDeviceReq());
     request->__set_sessionId(sessionId);
diff --git a/client-cpp/src/main/Session.h b/client-cpp/src/main/Session.h
index 4e8aba7..62995a4 100644
--- a/client-cpp/src/main/Session.h
+++ b/client-cpp/src/main/Session.h
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
- 
+
 #include <string>
 #include <vector>
-#include <exception> 
+#include <exception>
 #include <iostream>
 #include <algorithm>
 #include <map>
@@ -52,7 +52,7 @@ class IoTDBConnectionException : public std::exception
         IoTDBConnectionException() : message() {}
         IoTDBConnectionException(const char* m) : message(m) {}
         IoTDBConnectionException(std::string m) : message(m) {}
-        virtual const char* what() const throw () 
+        virtual const char* what() const throw ()
         {
             return message.c_str();
         }
@@ -76,7 +76,7 @@ public:
     std::vector<TSStatus> statusList;
 private:
     std::string message;
-    
+
 };
 
 class UnSupportedDataTypeException : public std::exception
@@ -368,7 +368,7 @@ private:
 public:
     std::string deviceId; // deviceId of this tablet
     std::vector<std::pair<std::string, TSDataType::TSDataType>> schemas; // 
the list of measurement schemas for creating the tablet
-    int64_t* timestamps;   //timestamps in this tablet
+    std::vector <int64_t> timestamps;   //timestamps in this tablet
     std::vector<std::vector<std::string>> values;
     int rowSize;    //the number of rows to include in this tablet
     int maxRowNumber;   // the maximum number of rows for this tablet
@@ -401,7 +401,7 @@ public:
         this->maxRowNumber = maxRowNumber;
 
         // create timestamp column
-        timestamps = new int64_t[maxRowNumber];
+        timestamps.resize(maxRowNumber);
         // create value columns
         values.resize(schemas.size());
         for (int i = 0; i < schemas.size(); i++) {
@@ -525,7 +525,7 @@ private:
     RowRecord rowRecord;
     char* currentBitmap; // used to cache the current bitmap for every column
     static const int flag = 0x80; // used to do `or` operation with bitmap to 
judge whether the value is null
-    
+
 public:
     SessionDataSet(){}
     SessionDataSet(std::string sql, std::vector<std::string>& columnNameList, 
std::vector<std::string>& columnTypeList, int64_t queryId,
@@ -594,7 +594,7 @@ class Session
         bool checkSorted(Tablet& tablet);
         bool checkSorted(std::vector<int64_t>& times);
         void sortTablet(Tablet& tablet);
-        void sortIndexByTimestamp(int* index, int64_t* timestamps, int length);
+        void sortIndexByTimestamp(int *index, std::vector<int64_t>& 
timestamps, int length);
         std::string getTimeZone();
         void setTimeZone(std::string zoneId);
         void appendValues(std::string &buffer, char* value, int size);

Reply via email to