From c94f2e64f87d3ea352a0f4f4d0d5e7bd4008331b Mon Sep 17 00:00:00 2001
From: Tj Holowaychuk <tj@vision-media.ca>
Date: Mon, 15 Nov 2010 08:37:34 -0800
Subject: [PATCH] Added Image::loadSync()

async seems to work fine in some cases, but something in cairo
is not thread-safe and messes up with `make test-server`
---
 src/Image.cc | 22 +++++++++++++++++++---
 src/Image.h  |  1 +
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/Image.cc b/src/Image.cc
index ca21095..35206b8 100644
--- a/src/Image.cc
+++ b/src/Image.cc
@@ -198,10 +198,26 @@ EIO_AfterLoad(eio_req *req) {
 void
 Image::load() {
   if (LOADING != state) {
-    Ref();
+    // TODO: use node IO
+    // Ref();
     state = LOADING;
-    eio_custom(EIO_Load, EIO_PRI_DEFAULT, EIO_AfterLoad, this);
-    ev_ref(EV_DEFAULT_UC);
+    loadSync();
+    // eio_custom(EIO_Load, EIO_PRI_DEFAULT, EIO_AfterLoad, this);
+    // ev_ref(EV_DEFAULT_UC);
+  }
+}
+
+/*
+ * Load image synchronously.
+ */
+
+void
+Image::loadSync() {
+  cairo_status_t status = loadSurface();
+  if (status) {
+    error(Canvas::Error(status));
+  } else {
+    loaded();
   }
 }
 
diff --git a/src/Image.h b/src/Image.h
index 654a467..d35ed58 100644
--- a/src/Image.h
+++ b/src/Image.h
@@ -34,6 +34,7 @@ class Image: public node::ObjectWrap {
     inline int stride(){ return cairo_image_surface_get_stride(_surface); } 
     cairo_status_t loadSurface();
     void error(Local<Value>);
+    void loadSync();
     void loaded();
     void load();
     Image();