From bf7e04afbdfc0e79b0479e98d7f30260c3082a32 Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Fri, 19 Nov 2010 10:47:25 -0800 Subject: [PATCH] Unref() canvas --- src/Canvas.cc | 9 +++++---- src/Canvas.h | 2 ++ src/Image.cc | 6 +++--- src/Image.h | 4 ++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Canvas.cc b/src/Canvas.cc index 2a6a185..e0784e4 100644 --- a/src/Canvas.cc +++ b/src/Canvas.cc @@ -133,8 +133,8 @@ toBuffer(void *c, const uint8_t *data, unsigned len) { * EIO toBuffer callback. */ -static int -EIO_ToBuffer(eio_req *req) { +int +Canvas::EIO_ToBuffer(eio_req *req) { closure_t *closure = (closure_t *) req->data; closure->status = cairo_surface_write_to_png_stream( @@ -149,8 +149,8 @@ EIO_ToBuffer(eio_req *req) { * EIO after toBuffer callback. */ -static int -EIO_AfterToBuffer(eio_req *req) { +int +Canvas::EIO_AfterToBuffer(eio_req *req) { HandleScope scope; closure_t *closure = (closure_t *) req->data; ev_unref(EV_DEFAULT_UC); @@ -165,6 +165,7 @@ EIO_AfterToBuffer(eio_req *req) { closure->pfn->Call(Context::GetCurrent()->Global(), 2, argv); } + closure->canvas->Unref(); closure->pfn.Dispose(); free(closure->data); free(closure); diff --git a/src/Canvas.h b/src/Canvas.h index fcce9d9..a82481e 100644 --- a/src/Canvas.h +++ b/src/Canvas.h @@ -61,6 +61,8 @@ class Canvas: public node::ObjectWrap { static void SetHeight(Local prop, Local val, const AccessorInfo &info); static Handle StreamPNGSync(const Arguments &args); static Local 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 uint8_t *data(){ return cairo_image_surface_get_data(_surface); } inline int stride(){ return cairo_image_surface_get_stride(_surface); } diff --git a/src/Image.cc b/src/Image.cc index 1a97a71..b377f6b 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -172,7 +172,7 @@ Image::~Image() { */ int -Image::EIO_load(eio_req *req) { +Image::EIO_Load(eio_req *req) { Image *img = (Image *) req->data; req->result = img->loadSurface(); return 0; @@ -183,7 +183,7 @@ Image::EIO_load(eio_req *req) { */ int -Image::EIO_afterLoad(eio_req *req) { +Image::EIO_AfterLoad(eio_req *req) { HandleScope scope; Image *img = (Image *) req->data; @@ -207,7 +207,7 @@ Image::load() { if (LOADING != state) { Ref(); 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); } } diff --git a/src/Image.h b/src/Image.h index c4ede1b..2b5df3e 100644 --- a/src/Image.h +++ b/src/Image.h @@ -31,8 +31,8 @@ class Image: public node::ObjectWrap { inline cairo_surface_t *surface(){ return _surface; } inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); } inline int stride(){ return cairo_image_surface_get_stride(_surface); } - static int EIO_load(eio_req *req); - static int EIO_afterLoad(eio_req *req); + static int EIO_Load(eio_req *req); + static int EIO_AfterLoad(eio_req *req); cairo_status_t loadSurface(); cairo_status_t loadPNG(); #ifdef HAVE_JPEG