[Pkg-javascript-commits] [node-leveldown] 434/492: fix batch() memory leaks & don't persist inputs
Andrew Kelley
andrewrk-guest at moszumanska.debian.org
Sun Jul 6 17:14:26 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 9d1977ce56dadf5bbc4551d909bfb8a36b65533a
Author: Rod Vagg <rod at vagg.org>
Date: Tue Nov 12 21:21:52 2013 +1100
fix batch() memory leaks & don't persist inputs
---
src/batch.cc | 12 +++++-------
src/batch.h | 1 -
src/database.cc | 9 +++------
src/database_async.cc | 6 +++---
src/database_async.h | 2 --
src/leveldown.h | 2 +-
6 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/src/batch.cc b/src/batch.cc
index 080ef14..7a9236a 100644
--- a/src/batch.cc
+++ b/src/batch.cc
@@ -15,13 +15,11 @@ Batch::Batch (leveldown::Database* database, bool sync) : database(database) {
options = new leveldb::WriteOptions();
options->sync = sync;
batch = new leveldb::WriteBatch();
- references = new std::vector<Reference *>;
hasData = false;
written = false;
}
Batch::~Batch () {
- ClearReferences(references);
delete options;
delete batch;
}
@@ -100,13 +98,13 @@ NAN_METHOD(Batch::Put) {
LD_STRING_OR_BUFFER_TO_SLICE(key, keyBuffer, key)
LD_STRING_OR_BUFFER_TO_SLICE(value, valueBuffer, value)
- //batch->references->push_back(new Reference(keyBuffer, key));
- //batch->references->push_back(new Reference(valueBuffer, value));
-
batch->batch->Put(key, value);
if (!batch->hasData)
batch->hasData = true;
+ DisposeStringOrBufferFromSlice(keyBuffer, key);
+ DisposeStringOrBufferFromSlice(valueBuffer, value);
+
NanReturnValue(args.Holder());
}
@@ -125,12 +123,12 @@ NAN_METHOD(Batch::Del) {
v8::Local<v8::Value> keyBuffer = args[0];
LD_STRING_OR_BUFFER_TO_SLICE(key, keyBuffer, key)
- //batch->references->push_back(new Reference(keyBuffer, key));
-
batch->batch->Delete(key);
if (!batch->hasData)
batch->hasData = true;
+ DisposeStringOrBufferFromSlice(keyBuffer, key);
+
NanReturnValue(args.Holder());
}
diff --git a/src/batch.h b/src/batch.h
index 7716d88..c72d790 100644
--- a/src/batch.h
+++ b/src/batch.h
@@ -26,7 +26,6 @@ private:
leveldown::Database* database;
leveldb::WriteOptions* options;
leveldb::WriteBatch* batch;
- std::vector<Reference *>* references;
bool hasData; // keep track of whether we're writing data or not
bool written;
diff --git a/src/database.cc b/src/database.cc
index a1eab72..9d64b2b 100644
--- a/src/database.cc
+++ b/src/database.cc
@@ -391,7 +391,6 @@ NAN_METHOD(Database::Batch) {
v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(args[0]);
- std::vector< Reference *>* references = new std::vector< Reference *>;
leveldb::WriteBatch* batch = new leveldb::WriteBatch();
bool hasData = false;
@@ -413,7 +412,7 @@ NAN_METHOD(Database::Batch) {
if (!hasData)
hasData = true;
- //references->push_back(new Reference(keyBuffer, key));
+ DisposeStringOrBufferFromSlice(keyBuffer, key);
} else if (obj->Get(NanSymbol("type"))->StrictEquals(NanSymbol("put"))) {
v8::Local<v8::Value> valueBuffer = obj->Get(NanSymbol("value"));
LD_CB_ERR_IF_NULL_OR_UNDEFINED(valueBuffer, value)
@@ -425,8 +424,8 @@ NAN_METHOD(Database::Batch) {
if (!hasData)
hasData = true;
- //references->push_back(new Reference(keyBuffer, key));
- //references->push_back(new Reference(valueBuffer, value));
+ DisposeStringOrBufferFromSlice(keyBuffer, key);
+ DisposeStringOrBufferFromSlice(valueBuffer, value);
}
}
@@ -436,11 +435,9 @@ NAN_METHOD(Database::Batch) {
database
, new NanCallback(callback)
, batch
- , references
, sync
));
} else {
- ClearReferences(references);
LD_RUN_CALLBACK(callback, 0, NULL);
}
diff --git a/src/database_async.cc b/src/database_async.cc
index 91b70fa..27aa982 100644
--- a/src/database_async.cc
+++ b/src/database_async.cc
@@ -6,6 +6,8 @@
#include <node.h>
#include <node_buffer.h>
+#include "leveldb/write_batch.h"
+
#include "database.h"
#include "leveldown.h"
#include "async.h"
@@ -201,18 +203,16 @@ BatchWorker::BatchWorker (
Database *database
, NanCallback *callback
, leveldb::WriteBatch* batch
- , std::vector<Reference *>* references
, bool sync
) : AsyncWorker(database, callback)
, batch(batch)
- , references(references)
{
options = new leveldb::WriteOptions();
options->sync = sync;
};
BatchWorker::~BatchWorker () {
- ClearReferences(references);
+ delete batch;
delete options;
}
diff --git a/src/database_async.h b/src/database_async.h
index 909e7e6..5209de3 100644
--- a/src/database_async.h
+++ b/src/database_async.h
@@ -129,7 +129,6 @@ public:
Database *database
, NanCallback *callback
, leveldb::WriteBatch* batch
- , std::vector<Reference *>* references
, bool sync
);
@@ -139,7 +138,6 @@ public:
private:
leveldb::WriteOptions* options;
leveldb::WriteBatch* batch;
- std::vector<Reference *>* references;
};
class ApproximateSizeWorker : public AsyncWorker {
diff --git a/src/leveldown.h b/src/leveldown.h
index 3d82795..2223094 100644
--- a/src/leveldown.h
+++ b/src/leveldown.h
@@ -29,7 +29,7 @@ static inline void DisposeStringOrBufferFromSlice(
}
static inline void DisposeStringOrBufferFromSlice(
- v8::Local<v8::Object> handle
+ v8::Local<v8::Value> handle
, leveldb::Slice slice) {
if (!node::Buffer::HasInstance(handle))
--
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