Browse Source

Unref() canvas

v1.x
Tj Holowaychuk 14 years ago
parent
commit
bf7e04afbd
  1. 9
      src/Canvas.cc
  2. 2
      src/Canvas.h
  3. 6
      src/Image.cc
  4. 4
      src/Image.h

9
src/Canvas.cc

@ -133,8 +133,8 @@ toBuffer(void *c, const uint8_t *data, unsigned len) {
* EIO toBuffer callback. * EIO toBuffer callback.
*/ */
static int int
EIO_ToBuffer(eio_req *req) { Canvas::EIO_ToBuffer(eio_req *req) {
closure_t *closure = (closure_t *) req->data; closure_t *closure = (closure_t *) req->data;
closure->status = cairo_surface_write_to_png_stream( closure->status = cairo_surface_write_to_png_stream(
@ -149,8 +149,8 @@ EIO_ToBuffer(eio_req *req) {
* EIO after toBuffer callback. * EIO after toBuffer callback.
*/ */
static int int
EIO_AfterToBuffer(eio_req *req) { Canvas::EIO_AfterToBuffer(eio_req *req) {
HandleScope scope; HandleScope scope;
closure_t *closure = (closure_t *) req->data; closure_t *closure = (closure_t *) req->data;
ev_unref(EV_DEFAULT_UC); ev_unref(EV_DEFAULT_UC);
@ -165,6 +165,7 @@ EIO_AfterToBuffer(eio_req *req) {
closure->pfn->Call(Context::GetCurrent()->Global(), 2, argv); closure->pfn->Call(Context::GetCurrent()->Global(), 2, argv);
} }
closure->canvas->Unref();
closure->pfn.Dispose(); closure->pfn.Dispose();
free(closure->data); free(closure->data);
free(closure); free(closure);

2
src/Canvas.h

@ -61,6 +61,8 @@ class Canvas: public node::ObjectWrap {
static void SetHeight(Local<String> prop, Local<Value> val, const AccessorInfo &info); static void SetHeight(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static Handle<Value> StreamPNGSync(const Arguments &args); static Handle<Value> StreamPNGSync(const Arguments &args);
static Local<Value> Error(cairo_status_t status); static Local<Value> Error(cairo_status_t status);
static int EIO_ToBuffer(eio_req *req);
static int EIO_AfterToBuffer(eio_req *req);
inline cairo_surface_t *surface(){ return _surface; } inline cairo_surface_t *surface(){ return _surface; }
inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); } inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); }
inline int stride(){ return cairo_image_surface_get_stride(_surface); } inline int stride(){ return cairo_image_surface_get_stride(_surface); }

6
src/Image.cc

@ -172,7 +172,7 @@ Image::~Image() {
*/ */
int int
Image::EIO_load(eio_req *req) { Image::EIO_Load(eio_req *req) {
Image *img = (Image *) req->data; Image *img = (Image *) req->data;
req->result = img->loadSurface(); req->result = img->loadSurface();
return 0; return 0;
@ -183,7 +183,7 @@ Image::EIO_load(eio_req *req) {
*/ */
int int
Image::EIO_afterLoad(eio_req *req) { Image::EIO_AfterLoad(eio_req *req) {
HandleScope scope; HandleScope scope;
Image *img = (Image *) req->data; Image *img = (Image *) req->data;
@ -207,7 +207,7 @@ Image::load() {
if (LOADING != state) { if (LOADING != state) {
Ref(); Ref();
state = LOADING; state = LOADING;
eio_custom(EIO_load, EIO_PRI_DEFAULT, EIO_afterLoad, this); eio_custom(EIO_Load, EIO_PRI_DEFAULT, EIO_AfterLoad, this);
ev_ref(EV_DEFAULT_UC); ev_ref(EV_DEFAULT_UC);
} }
} }

4
src/Image.h

@ -31,8 +31,8 @@ class Image: public node::ObjectWrap {
inline cairo_surface_t *surface(){ return _surface; } inline cairo_surface_t *surface(){ return _surface; }
inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); } inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); }
inline int stride(){ return cairo_image_surface_get_stride(_surface); } inline int stride(){ return cairo_image_surface_get_stride(_surface); }
static int EIO_load(eio_req *req); static int EIO_Load(eio_req *req);
static int EIO_afterLoad(eio_req *req); static int EIO_AfterLoad(eio_req *req);
cairo_status_t loadSurface(); cairo_status_t loadSurface();
cairo_status_t loadPNG(); cairo_status_t loadPNG();
#ifdef HAVE_JPEG #ifdef HAVE_JPEG

Loading…
Cancel
Save