Local<Function> l = Local<Function>::Cast(last_arg); \
callback = new Persistent<Function>(); \
*callback = Persistent<Function>::New(l); \
- } \
- node::eio_warmup(); \
+ }
#define CALL_CALLBACK_PTR(req, argc, argv) \
do { \
Connection::Resolve(req);
#else
/* For the moment I will do DNS lookups in the eio thread pool. This is
- * sub-optimal and cannot handle massive numbers of requests but it is
- * quite portable.
+ * sub-optimal and cannot handle massive numbers of requests.
* In the future I will move to a system using adns or udns:
* http://lists.schmorp.de/pipermail/libev/2009q1/000632.html
*/
- eio_warmup();
connection->Attach();
eio_custom( Connection::Resolve
, EIO_PRI_DEFAULT
node_eio_cb (EV_P_ ev_async *w, int revents)
{
int r = eio_poll();
- /* returns 0 if all requests were handled, -1 if not, or the value of EIO_FINISH if != 0 */
-
- // XXX is this check too heavy?
- // it require three locks in eio
- // what's the better way?
- if (eio_nreqs () == 0 && eio_nready() == 0 && eio_npending() == 0)
- ev_async_stop(EV_DEFAULT_UC_ w);
}
static void
ev_async_send(EV_DEFAULT_UC_ &eio_watcher);
}
-void
-node::eio_warmup (void)
-{
- ev_async_start(EV_DEFAULT_UC_ &eio_watcher);
-}
-
enum encoding
node::ParseEncoding (Handle<Value> encoding_v)
{
// start eio thread pool
ev_async_init(&eio_watcher, node_eio_cb);
eio_init(eio_want_poll, NULL);
+ ev_async_start(EV_DEFAULT_UC_ &eio_watcher);
+ ev_unref(EV_DEFAULT_UC);
V8::SetFlagsFromCommandLine(&argc, argv, true);
V8::Initialize();
enum encoding {ASCII, UTF8, RAW};
enum encoding ParseEncoding (v8::Handle<v8::Value> encoding_v);
void FatalException (v8::TryCatch &try_catch);
-void eio_warmup (void); // call this before creating a new eio event.
class ObjectWrap {
public: