self.emit('error', ex);
}
else if (self._handle) {
- var req = {};
+ var req = { buffer: buffer }; // Keep reference alive.
if (callback) {
req.callback = callback;
req.oncomplete = afterSend;
// Retain chunks
if (err === 0) req._chunks = chunks;
} else {
- var enc = util.isBuffer(data) ? 'buffer' : encoding;
+ var enc;
+ if (util.isBuffer(data)) {
+ req.buffer = data; // Keep reference alive.
+ enc = 'buffer';
+ } else {
+ enc = encoding;
+ }
err = createWriteReq(req, this._handle, data, enc);
}
var self = handle.owner;
var state = self._writableState;
if (self !== process.stderr && self !== process.stdout)
- debug('afterWrite', status, req);
+ debug('afterWrite', status);
// callback may come after call to destroy.
if (self.destroyed) {
using v8::Value;
-static Cached<String> buffer_sym;
static Cached<String> bytes_sym;
static Cached<String> write_queue_size_sym;
static Cached<String> onread_sym;
initialized = true;
HandleScope scope(node_isolate);
- buffer_sym = FIXED_ONE_BYTE_STRING(node_isolate, "buffer");
bytes_sym = FIXED_ONE_BYTE_STRING(node_isolate, "bytes");
write_queue_size_sym = FIXED_ONE_BYTE_STRING(node_isolate, "writeQueueSize");
onread_sym = FIXED_ONE_BYTE_STRING(node_isolate, "onread");
char* storage = new char[sizeof(WriteWrap)];
WriteWrap* req_wrap = new(storage) WriteWrap(req_wrap_obj, wrap);
- req_wrap_obj->SetHiddenValue(buffer_sym, buf_obj);
-
uv_buf_t buf;
WriteBuffer(buf_obj, &buf);
static Persistent<Function> constructor;
-static Cached<String> buffer_sym;
static Cached<String> oncomplete_sym;
static Cached<String> onmessage_sym;
void UDPWrap::Initialize(Handle<Object> target) {
HandleScope scope(node_isolate);
- buffer_sym = FIXED_ONE_BYTE_STRING(node_isolate, "buffer");
oncomplete_sym = FIXED_ONE_BYTE_STRING(node_isolate, "oncomplete");
onmessage_sym = FIXED_ONE_BYTE_STRING(node_isolate, "onmessage");
assert(length <= Buffer::Length(buffer_obj) - offset);
SendWrap* req_wrap = new SendWrap(req_wrap_obj, have_callback);
- req_wrap->object()->SetHiddenValue(buffer_sym, buffer_obj);
uv_buf_t buf = uv_buf_init(Buffer::Data(buffer_obj) + offset,
length);