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);