Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Fix build for Node.js 0.6 and up #17

Merged
merged 2 commits into from

2 participants

Christian Rishøj Jeroen Janssen
Christian Rishøj

No description provided.

Jeroen Janssen japj merged commit b75f65a into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Aug 22, 2012
  1. Christian Rishøj

    now builds with Node 0.8

    crishoj authored
  2. Christian Rishøj

    liberal engine dependency

    crishoj authored
This page is out of date. Refresh to see the latest.
Showing with 21 additions and 12 deletions.
  1. +1 −1  package.json
  2. +20 −11 src/async_uv.h
2  package.json
View
@@ -5,5 +5,5 @@
"keywords": [],
"author": "Jeroen Janssen <jeroen.janssen@gmail.com>",
"main": "./sdlmixer",
- "engines": { "node": "0.4.x" }
+ "engine": "node >= 0.4.x"
}
31 src/async_uv.h
View
@@ -1,11 +1,12 @@
#ifndef NODE_SQLITE3_SRC_ASYNC_H
#define NODE_SQLITE3_SRC_ASYNC_H
+#include <node_version.h>
// Generic uv_async handler.
template <class Item, class Parent> class Async {
typedef void (*Callback)(Parent* parent, Item* item);
-
+
protected:
uv_async_t watcher;
pthread_mutex_t mutex;
@@ -13,15 +14,15 @@ template <class Item, class Parent> class Async {
Callback callback;
public:
Parent* parent;
-
+
public:
Async(Parent* parent_, Callback cb_)
- : callback(cb_), parent(parent_) {
+ : callback(cb_), parent(parent_) {
watcher.data = this;
pthread_mutex_init(&mutex, NULL);
uv_async_init(uv_default_loop(), &watcher, listener);
}
-
+
static void listener(uv_async_t* handle, int status) {
Async* async = static_cast<Async*>(handle->data);
std::vector<Item*> rows;
@@ -29,11 +30,15 @@ template <class Item, class Parent> class Async {
rows.swap(async->data);
pthread_mutex_unlock(&async->mutex);
for (unsigned int i = 0, size = rows.size(); i < size; i++) {
+#if NODE_VERSION_AT_LEAST(0, 7, 9)
+ uv_unref((uv_handle_t *)&async->watcher);
+#else
uv_unref(uv_default_loop());
+#endif
async->callback(async->parent, rows[i]);
}
}
-
+
static void close(uv_handle_t* handle) {
assert(handle != NULL);
assert(handle->data != NULL);
@@ -41,7 +46,7 @@ template <class Item, class Parent> class Async {
delete async;
handle->data = NULL;
}
-
+
void finish() {
// Need to call the listener again to ensure all items have been
// processed. Is this a bug in uv_async? Feels like uv_close
@@ -49,27 +54,31 @@ template <class Item, class Parent> class Async {
listener(&watcher, 0);
uv_close((uv_handle_t*)&watcher, close);
}
-
+
void add(Item* item) {
// Make sure node runs long enough to deliver the messages.
+#if NODE_VERSION_AT_LEAST(0, 7, 9)
+ uv_ref((uv_handle_t *)&watcher);
+#else
uv_ref(uv_default_loop());
+#endif
pthread_mutex_lock(&mutex);
data.push_back(item);
pthread_mutex_unlock(&mutex);
}
-
+
void send() {
uv_async_send(&watcher);
}
-
+
void send(Item* item) {
add(item);
send();
}
-
+
~Async() {
pthread_mutex_destroy(&mutex);
}
};
-#endif
+#endif
Something went wrong with that request. Please try again.