Merge branch 'v0.6'
Conflicts: src/handle_wrap.cc src/node_zlib.cc src/process_wrap.cc
This commit is contained in:
commit
9e6957b0a5
2
Makefile
2
Makefile
@ -177,7 +177,7 @@ bench-idle:
|
|||||||
./node benchmark/idle_clients.js &
|
./node benchmark/idle_clients.js &
|
||||||
|
|
||||||
jslint:
|
jslint:
|
||||||
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ -r test/
|
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ -r test/ --exclude_files lib/punycode.js
|
||||||
|
|
||||||
cpplint:
|
cpplint:
|
||||||
@$(PYTHON) tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)
|
@$(PYTHON) tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 451 KiB |
BIN
doc/full-white-stripe.jpg
Normal file
BIN
doc/full-white-stripe.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 84 KiB |
BIN
doc/thin-white-stripe.jpg
Normal file
BIN
doc/thin-white-stripe.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
@ -100,8 +100,11 @@ Handle<Value> HandleWrap::Close(const Arguments& args) {
|
|||||||
|
|
||||||
UNWRAP
|
UNWRAP
|
||||||
|
|
||||||
|
// guard against uninitialized handle or double close
|
||||||
|
if (wrap->handle__ == NULL) return v8::Null();
|
||||||
assert(!wrap->object_.IsEmpty());
|
assert(!wrap->object_.IsEmpty());
|
||||||
uv_close(wrap->handle__, OnClose);
|
uv_close(wrap->handle__, OnClose);
|
||||||
|
wrap->handle__ = NULL;
|
||||||
|
|
||||||
HandleWrap::Ref(args);
|
HandleWrap::Ref(args);
|
||||||
|
|
||||||
@ -143,6 +146,9 @@ void HandleWrap::OnClose(uv_handle_t* handle) {
|
|||||||
// The wrap object should still be there.
|
// The wrap object should still be there.
|
||||||
assert(wrap->object_.IsEmpty() == false);
|
assert(wrap->object_.IsEmpty() == false);
|
||||||
|
|
||||||
|
// But the handle pointer should be gone.
|
||||||
|
assert(wrap->handle__ == NULL);
|
||||||
|
|
||||||
wrap->object_->SetPointerInInternalField(0, NULL);
|
wrap->object_->SetPointerInInternalField(0, NULL);
|
||||||
wrap->object_.Dispose();
|
wrap->object_.Dispose();
|
||||||
wrap->object_.Clear();
|
wrap->object_.Clear();
|
||||||
|
@ -29,9 +29,6 @@
|
|||||||
|
|
||||||
#include <node.h>
|
#include <node.h>
|
||||||
#include <node_buffer.h>
|
#include <node_buffer.h>
|
||||||
#include <node_vars.h>
|
|
||||||
#include <req_wrap.h>
|
|
||||||
|
|
||||||
#include <node_vars.h>
|
#include <node_vars.h>
|
||||||
// We do the following to minimize the detal between v0.6 branch. We want to
|
// We do the following to minimize the detal between v0.6 branch. We want to
|
||||||
// use the variables as they were being used before.
|
// use the variables as they were being used before.
|
||||||
@ -41,8 +38,6 @@
|
|||||||
namespace node {
|
namespace node {
|
||||||
using namespace v8;
|
using namespace v8;
|
||||||
|
|
||||||
// write() returns one of these, and then calls the cb() when it's done.
|
|
||||||
typedef ReqWrap<uv_work_t> WorkReqWrap;
|
|
||||||
|
|
||||||
enum node_zlib_mode {
|
enum node_zlib_mode {
|
||||||
DEFLATE = 1,
|
DEFLATE = 1,
|
||||||
@ -81,14 +76,16 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write(flush, in, in_off, in_len, out, out_off, out_len)
|
// write(flush, in, in_off, in_len, out, out_off, out_len)
|
||||||
static Handle<Value>
|
static Handle<Value> Write(const Arguments& args) {
|
||||||
Write(const Arguments& args) {
|
|
||||||
HandleScope scope;
|
HandleScope scope;
|
||||||
assert(args.Length() == 7);
|
assert(args.Length() == 7);
|
||||||
|
|
||||||
ZCtx<mode> *ctx = ObjectWrap::Unwrap< ZCtx<mode> >(args.This());
|
ZCtx<mode> *ctx = ObjectWrap::Unwrap< ZCtx<mode> >(args.This());
|
||||||
assert(ctx->init_done_ && "write before init");
|
assert(ctx->init_done_ && "write before init");
|
||||||
|
|
||||||
|
assert(!ctx->write_in_progress_ && "write already in progress");
|
||||||
|
ctx->write_in_progress_ = true;
|
||||||
|
|
||||||
unsigned int flush = args[0]->Uint32Value();
|
unsigned int flush = args[0]->Uint32Value();
|
||||||
Bytef *in;
|
Bytef *in;
|
||||||
Bytef *out;
|
Bytef *out;
|
||||||
@ -104,8 +101,8 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
assert(Buffer::HasInstance(args[1]));
|
assert(Buffer::HasInstance(args[1]));
|
||||||
Local<Object> in_buf;
|
Local<Object> in_buf;
|
||||||
in_buf = args[1]->ToObject();
|
in_buf = args[1]->ToObject();
|
||||||
in_off = (size_t)args[2]->Uint32Value();
|
in_off = args[2]->Uint32Value();
|
||||||
in_len = (size_t)args[3]->Uint32Value();
|
in_len = args[3]->Uint32Value();
|
||||||
|
|
||||||
assert(in_off + in_len <= Buffer::Length(in_buf));
|
assert(in_off + in_len <= Buffer::Length(in_buf));
|
||||||
in = reinterpret_cast<Bytef *>(Buffer::Data(in_buf) + in_off);
|
in = reinterpret_cast<Bytef *>(Buffer::Data(in_buf) + in_off);
|
||||||
@ -113,16 +110,16 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
|
|
||||||
assert(Buffer::HasInstance(args[4]));
|
assert(Buffer::HasInstance(args[4]));
|
||||||
Local<Object> out_buf = args[4]->ToObject();
|
Local<Object> out_buf = args[4]->ToObject();
|
||||||
out_off = (size_t)args[5]->Uint32Value();
|
out_off = args[5]->Uint32Value();
|
||||||
out_len = (size_t)args[6]->Uint32Value();
|
out_len = args[6]->Uint32Value();
|
||||||
assert(out_off + out_len <= Buffer::Length(out_buf));
|
assert(out_off + out_len <= Buffer::Length(out_buf));
|
||||||
out = reinterpret_cast<Bytef *>(Buffer::Data(out_buf) + out_off);
|
out = reinterpret_cast<Bytef *>(Buffer::Data(out_buf) + out_off);
|
||||||
|
|
||||||
WorkReqWrap *req_wrap = new WorkReqWrap();
|
// build up the work request
|
||||||
|
uv_work_t* work_req = &(ctx->work_req_);
|
||||||
|
|
||||||
req_wrap->data_ = ctx;
|
|
||||||
ctx->strm_.avail_in = in_len;
|
ctx->strm_.avail_in = in_len;
|
||||||
ctx->strm_.next_in = &(*in);
|
ctx->strm_.next_in = in;
|
||||||
ctx->strm_.avail_out = out_len;
|
ctx->strm_.avail_out = out_len;
|
||||||
ctx->strm_.next_out = out;
|
ctx->strm_.next_out = out;
|
||||||
ctx->flush_ = flush;
|
ctx->flush_ = flush;
|
||||||
@ -130,18 +127,14 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
// set this so that later on, I can easily tell how much was written.
|
// set this so that later on, I can easily tell how much was written.
|
||||||
ctx->chunk_size_ = out_len;
|
ctx->chunk_size_ = out_len;
|
||||||
|
|
||||||
// build up the work request
|
|
||||||
uv_work_t* work_req = new uv_work_t();
|
|
||||||
work_req->data = req_wrap;
|
|
||||||
|
|
||||||
uv_queue_work(Loop(),
|
uv_queue_work(Loop(),
|
||||||
work_req,
|
work_req,
|
||||||
ZCtx<mode>::Process,
|
ZCtx<mode>::Process,
|
||||||
ZCtx<mode>::After);
|
ZCtx<mode>::After);
|
||||||
|
|
||||||
req_wrap->Dispatched();
|
ctx->Ref();
|
||||||
|
|
||||||
return req_wrap->object_;
|
return ctx->handle_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -149,10 +142,8 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
// This function may be called multiple times on the uv_work pool
|
// This function may be called multiple times on the uv_work pool
|
||||||
// for a single write() call, until all of the input bytes have
|
// for a single write() call, until all of the input bytes have
|
||||||
// been consumed.
|
// been consumed.
|
||||||
static void
|
static void Process(uv_work_t* work_req) {
|
||||||
Process(uv_work_t* work_req) {
|
ZCtx<mode> *ctx = container_of(work_req, ZCtx<mode>, work_req_);
|
||||||
WorkReqWrap *req_wrap = reinterpret_cast<WorkReqWrap *>(work_req->data);
|
|
||||||
ZCtx<mode> *ctx = (ZCtx<mode> *)req_wrap->data_;
|
|
||||||
|
|
||||||
// If the avail_out is left at 0, then it means that it ran out
|
// If the avail_out is left at 0, then it means that it ran out
|
||||||
// of room. If there was avail_out left over, then it means
|
// of room. If there was avail_out left over, then it means
|
||||||
@ -162,13 +153,13 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
case DEFLATE:
|
case DEFLATE:
|
||||||
case GZIP:
|
case GZIP:
|
||||||
case DEFLATERAW:
|
case DEFLATERAW:
|
||||||
err = deflate(&(ctx->strm_), ctx->flush_);
|
err = deflate(&ctx->strm_, ctx->flush_);
|
||||||
break;
|
break;
|
||||||
case UNZIP:
|
case UNZIP:
|
||||||
case INFLATE:
|
case INFLATE:
|
||||||
case GUNZIP:
|
case GUNZIP:
|
||||||
case INFLATERAW:
|
case INFLATERAW:
|
||||||
err = inflate(&(ctx->strm_), ctx->flush_);
|
err = inflate(&ctx->strm_, ctx->flush_);
|
||||||
|
|
||||||
// If data was encoded with dictionary
|
// If data was encoded with dictionary
|
||||||
if (err == Z_NEED_DICT) {
|
if (err == Z_NEED_DICT) {
|
||||||
@ -197,26 +188,25 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// v8 land!
|
// v8 land!
|
||||||
static void
|
static void After(uv_work_t* work_req) {
|
||||||
After(uv_work_t* work_req) {
|
|
||||||
HandleScope scope;
|
HandleScope scope;
|
||||||
WorkReqWrap *req_wrap = reinterpret_cast<WorkReqWrap *>(work_req->data);
|
ZCtx<mode> *ctx = container_of(work_req, ZCtx<mode>, work_req_);
|
||||||
ZCtx<mode> *ctx = (ZCtx<mode> *)req_wrap->data_;
|
|
||||||
Local<Integer> avail_out = Integer::New(ctx->strm_.avail_out);
|
Local<Integer> avail_out = Integer::New(ctx->strm_.avail_out);
|
||||||
Local<Integer> avail_in = Integer::New(ctx->strm_.avail_in);
|
Local<Integer> avail_in = Integer::New(ctx->strm_.avail_in);
|
||||||
|
|
||||||
|
ctx->write_in_progress_ = false;
|
||||||
|
|
||||||
// call the write() cb
|
// call the write() cb
|
||||||
assert(req_wrap->object_->Get(callback_sym)->IsFunction() &&
|
assert(ctx->handle_->Get(callback_sym)->IsFunction() &&
|
||||||
"Invalid callback");
|
"Invalid callback");
|
||||||
Local<Value> args[2] = { avail_in, avail_out };
|
Local<Value> args[2] = { avail_in, avail_out };
|
||||||
MakeCallback(req_wrap->object_, "callback", 2, args);
|
MakeCallback(ctx->handle_, "callback", 2, args);
|
||||||
|
|
||||||
// delete the ReqWrap
|
ctx->Unref();
|
||||||
delete req_wrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Handle<Value>
|
static Handle<Value> New(const Arguments& args) {
|
||||||
New(const Arguments& args) {
|
|
||||||
HandleScope scope;
|
HandleScope scope;
|
||||||
ZCtx<mode> *ctx = new ZCtx<mode>();
|
ZCtx<mode> *ctx = new ZCtx<mode>();
|
||||||
ctx->Wrap(args.This());
|
ctx->Wrap(args.This());
|
||||||
@ -224,8 +214,7 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// just pull the ints out of the args and call the other Init
|
// just pull the ints out of the args and call the other Init
|
||||||
static Handle<Value>
|
static Handle<Value> Init(const Arguments& args) {
|
||||||
Init(const Arguments& args) {
|
|
||||||
HandleScope scope;
|
HandleScope scope;
|
||||||
|
|
||||||
assert((args.Length() == 4 || args.Length() == 5) &&
|
assert((args.Length() == 4 || args.Length() == 5) &&
|
||||||
@ -265,14 +254,8 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
return Undefined();
|
return Undefined();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void Init(ZCtx *ctx, int level, int windowBits, int memLevel,
|
||||||
Init(ZCtx *ctx,
|
int strategy, char* dictionary, size_t dictionary_len) {
|
||||||
int level,
|
|
||||||
int windowBits,
|
|
||||||
int memLevel,
|
|
||||||
int strategy,
|
|
||||||
char* dictionary,
|
|
||||||
size_t dictionary_len) {
|
|
||||||
ctx->level_ = level;
|
ctx->level_ = level;
|
||||||
ctx->windowBits_ = windowBits;
|
ctx->windowBits_ = windowBits;
|
||||||
ctx->memLevel_ = memLevel;
|
ctx->memLevel_ = memLevel;
|
||||||
@ -340,6 +323,7 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
assert(err == Z_OK && "Failed to set dictionary");
|
assert(err == Z_OK && "Failed to set dictionary");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx->write_in_progress_ = false;
|
||||||
ctx->init_done_ = true;
|
ctx->init_done_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,6 +343,10 @@ template <node_zlib_mode mode> class ZCtx : public ObjectWrap {
|
|||||||
int flush_;
|
int flush_;
|
||||||
|
|
||||||
int chunk_size_;
|
int chunk_size_;
|
||||||
|
|
||||||
|
bool write_in_progress_;
|
||||||
|
|
||||||
|
uv_work_t work_req_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,10 +178,14 @@ class ProcessWrap : public HandleWrap {
|
|||||||
|
|
||||||
int r = uv_spawn(Loop(), &wrap->process_, options);
|
int r = uv_spawn(Loop(), &wrap->process_, options);
|
||||||
|
|
||||||
wrap->SetHandle((uv_handle_t*)&wrap->process_);
|
if (r) {
|
||||||
assert(wrap->process_.data == wrap);
|
SetErrno(uv_last_error(Loop()));
|
||||||
|
}
|
||||||
wrap->object_->Set(String::New("pid"), Integer::New(wrap->process_.pid));
|
else {
|
||||||
|
wrap->SetHandle((uv_handle_t*)&wrap->process_);
|
||||||
|
assert(wrap->process_.data == wrap);
|
||||||
|
wrap->object_->Set(String::New("pid"), Integer::New(wrap->process_.pid));
|
||||||
|
}
|
||||||
|
|
||||||
if (options.args) {
|
if (options.args) {
|
||||||
for (int i = 0; options.args[i]; i++) free(options.args[i]);
|
for (int i = 0; options.args[i]; i++) free(options.args[i]);
|
||||||
@ -196,8 +200,6 @@ class ProcessWrap : public HandleWrap {
|
|||||||
delete [] options.env;
|
delete [] options.env;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r) SetErrno(uv_last_error(Loop()));
|
|
||||||
|
|
||||||
return scope.Close(Integer::New(r));
|
return scope.Close(Integer::New(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#define slab_sym NODE_VAR(slab_sym)
|
#define slab_sym NODE_VAR(slab_sym)
|
||||||
#define handle_that_last_alloced NODE_VAR(handle_that_last_alloced)
|
#define handle_that_last_alloced NODE_VAR(handle_that_last_alloced)
|
||||||
#define buffer_sym NODE_VAR(buffer_sym)
|
#define buffer_sym NODE_VAR(buffer_sym)
|
||||||
|
#define buffer_constructor_template NODE_VAR(buffer_constructor_template)
|
||||||
#define write_queue_size_sym NODE_VAR(write_queue_size_sym)
|
#define write_queue_size_sym NODE_VAR(write_queue_size_sym)
|
||||||
#define stream_wrap_initialized NODE_VAR(stream_wrap_initialized)
|
#define stream_wrap_initialized NODE_VAR(stream_wrap_initialized)
|
||||||
|
|
||||||
@ -153,13 +154,17 @@ Handle<Value> StreamWrap::ReadStop(const Arguments& args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline char* StreamWrap::NewSlab(Handle<Object> global,
|
char* StreamWrap::NewSlab(Handle<Object> global,
|
||||||
Handle<Object> wrap_obj) {
|
Handle<Object> wrap_obj) {
|
||||||
Buffer* b = Buffer::New(SLAB_SIZE);
|
HandleScope scope;
|
||||||
global->SetHiddenValue(slab_sym, b->handle_);
|
Local<Value> arg = Integer::NewFromUnsigned(SLAB_SIZE);
|
||||||
|
Local<Object> b = buffer_constructor_template->GetFunction()->
|
||||||
|
NewInstance(1, &arg);
|
||||||
|
if (b.IsEmpty()) return NULL;
|
||||||
|
global->SetHiddenValue(slab_sym, b);
|
||||||
assert(Buffer::Length(b) == SLAB_SIZE);
|
assert(Buffer::Length(b) == SLAB_SIZE);
|
||||||
slab_used = 0;
|
slab_used = 0;
|
||||||
wrap_obj->SetHiddenValue(slab_sym, b->handle_);
|
wrap_obj->SetHiddenValue(slab_sym, b);
|
||||||
return Buffer::Data(b);
|
return Buffer::Data(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,8 +114,8 @@
|
|||||||
</UI>
|
</UI>
|
||||||
|
|
||||||
<UIRef Id="WixUI_Common" />
|
<UIRef Id="WixUI_Common" />
|
||||||
<WixVariable Id="WixUIBannerBmp" Value="..\..\..\doc\thin-white-stripe.bmp" />
|
<WixVariable Id="WixUIBannerBmp" Value="..\..\..\doc\thin-white-stripe.jpg" />
|
||||||
<WixVariable Id="WixUIDialogBmp" Value="..\..\..\doc\full-white-stripe.bmp" />
|
<WixVariable Id="WixUIDialogBmp" Value="..\..\..\doc\full-white-stripe.jpg" />
|
||||||
</Product>
|
</Product>
|
||||||
|
|
||||||
</Wix>
|
</Wix>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user