int DynamicPngStack::EIO_PngEncodeAfter(eio_req *req) { HandleScope scope; ev_unref(EV_DEFAULT_UC); encode_request *enc_req = (encode_request *)req->data; DynamicPngStack *png = (DynamicPngStack *)enc_req->png_obj; Handle<Value> argv[3]; if (enc_req->error) { argv[0] = Undefined(); argv[1] = Undefined(); argv[2] = ErrorException(enc_req->error); } else { Buffer *buf = Buffer::New(enc_req->png_len); memcpy(BufferData(buf), enc_req->png, enc_req->png_len); argv[0] = buf->handle_; argv[1] = png->Dimensions(); argv[2] = Undefined(); } TryCatch try_catch; // don't quite see the necessity of this enc_req->callback->Call(Context::GetCurrent()->Global(), 3, argv); if (try_catch.HasCaught()) FatalException(try_catch); enc_req->callback.Dispose(); free(enc_req->png); free(enc_req->error); png->Unref(); free(enc_req); return 0; }