[Pkg-javascript-commits] [node-leveldown] 336/492: memory leak, not disposing of String->Slice char*
Andrew Kelley
andrewrk-guest at moszumanska.debian.org
Sun Jul 6 17:14:15 UTC 2014
This is an automated email from the git hooks/post-receive script.
andrewrk-guest pushed a commit to annotated tag rocksdb-0.10.1
in repository node-leveldown.
commit 83ffd7dac561a71b03f11cdf6d0c9c71d657875e
Author: Rod Vagg <rod at vagg.org>
Date: Fri May 17 11:51:07 2013 +1000
memory leak, not disposing of String->Slice char*
---
src/batch.cc | 8 +-------
src/database_async.cc | 8 ++++----
src/leveldown.h | 12 ++++++++++++
3 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/src/batch.cc b/src/batch.cc
index 4777446..7e26fab 100644
--- a/src/batch.cc
+++ b/src/batch.cc
@@ -18,13 +18,7 @@ Batch::Batch (leveldown::Database* database, bool sync) : database(database) {
}
Batch::~Batch () {
- for (std::vector< v8::Persistent<v8::Value> >::iterator it = references->begin()
- ; it != references->end()
- ; ) {
- it->Dispose(LD_NODE_ISOLATE);
- it = references->erase(it);
- }
- delete references;
+ ClearReferences(references);
delete options;
delete batch;
}
diff --git a/src/database_async.cc b/src/database_async.cc
index 44a3f98..a6e6ad9 100644
--- a/src/database_async.cc
+++ b/src/database_async.cc
@@ -85,7 +85,7 @@ IOWorker::~IOWorker () {}
void IOWorker::WorkComplete () {
AsyncWorker::WorkComplete();
- keyPtr.Dispose(LD_NODE_ISOLATE);
+ DisposeStringOrBufferFromSlice(keyPtr, key);
}
/** READ WORKER **/
@@ -172,7 +172,7 @@ void WriteWorker::Execute () {
void WriteWorker::WorkComplete () {
IOWorker::WorkComplete();
- valuePtr.Dispose(LD_NODE_ISOLATE);
+ DisposeStringOrBufferFromSlice(valuePtr, value);
}
/** BATCH WORKER **/
@@ -223,8 +223,8 @@ void ApproximateSizeWorker::Execute () {
void ApproximateSizeWorker::WorkComplete() {
AsyncWorker::WorkComplete();
- startPtr.Dispose(LD_NODE_ISOLATE);
- endPtr.Dispose(LD_NODE_ISOLATE);
+ DisposeStringOrBufferFromSlice(startPtr, range.start);
+ DisposeStringOrBufferFromSlice(endPtr, range.limit);
}
void ApproximateSizeWorker::HandleOKCallback () {
diff --git a/src/leveldown.h b/src/leveldown.h
index 49fd2fe..67d0c80 100644
--- a/src/leveldown.h
+++ b/src/leveldown.h
@@ -7,6 +7,7 @@
#include <node.h>
#include <node_buffer.h>
+#include <leveldb/slice.h>
static inline char* FromV8String(v8::Local<v8::Value> from) {
size_t sz_;
@@ -79,6 +80,17 @@ static inline uint32_t UInt32OptionValue(
LD_RETURN_CALLBACK_OR_ERROR(callback, #name " cannot be `null` or `undefined`") \
}
+// NOTE: this MUST be called on objects created by
+// LD_STRING_OR_BUFFER_TO_SLICE
+static inline void DisposeStringOrBufferFromSlice(v8::Persistent<v8::Value> ptr
+ , leveldb::Slice slice) {
+
+ if (!node::Buffer::HasInstance(ptr))
+ delete slice.data();
+ ptr.Dispose(LD_NODE_ISOLATE);
+}
+
+// NOTE: must call DisposeStringOrBufferFromSlice() on objects created here
#define LD_STRING_OR_BUFFER_TO_SLICE(to, from, name) \
size_t to ## Sz_; \
char* to ## Ch_; \
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-leveldown.git
More information about the Pkg-javascript-commits
mailing list