ClientWrap::ClientWrap( int compileGuarded ) : m_mutex("Node.js ClientWrap") { std::vector<std::string> pluginPaths; Plug::AppendUserPaths( pluginPaths ); Plug::AppendGlobalPaths( pluginPaths ); CG::CompileOptions compileOptions; if ( compileGuarded > -1 ) compileOptions.setGuarded( compileGuarded ); else compileOptions.setGuarded( false ); RC::Handle<IO::Manager> ioManager = IOManager::Create( &ClientWrap::ScheduleAsyncUserCallback, this ); RC::Handle<DG::Context> dgContext = DG::Context::Create( ioManager, pluginPaths, compileOptions, true ); #if defined(FABRIC_MODULE_OPENCL) OCL::registerTypes( dgContext->getRTManager() ); #endif Plug::Manager::Instance()->loadBuiltInPlugins( pluginPaths, dgContext->getCGManager(), DG::Context::GetCallbackStruct() ); m_client = Client::Create( dgContext, this ); m_mainThreadTLS = true; uv_async_init( uv_default_loop(), &m_uvAsync, &ClientWrap::AsyncCallback ); m_uvAsync.data = this; //// uv_timer_init adds a loop reference. (That is, it calls uv_ref.) This //// is not the behavior we want in Node. Timers should not increase the //// ref count of the loop except when active. //uv_unref( uv_default_loop() ); }