private void StartNodeServer()
        {
            lock (SYNC)
            {
                if (NodeServerContextInstance == null)
                {
                    var args = new[] {
                        Path.Combine(_env.ContentRootPath, "testing/helpers/vectormaputils-tester.js"),
                        Path.Combine(_env.ContentRootPath, PathToDataDirectory)
                    };

                    NodeServerContextInstance = new NodeServerContext(PathToNode, String.Join(" ", args.Select(QuoteArg)));
                    ThreadPool.QueueUserWorkItem(NodeServerThreadFunc);
                    NodeServerContextInstance.waitHandle.WaitOne();
                }
                ++NodeServerContextInstance.counter;
            }
        }
 private static void NodeServerThreadFunc(object state)
 {
     using (var process = StartProcess(NodeServerContextInstance.pathToNode, NodeServerContextInstance.arguments))
     {
         NodeServerContextInstance.waitHandle.Set();
         while (true)
         {
             Thread.Sleep(NodeServerCheckTimeout);
             lock (SYNC)
             {
                 if (NodeServerContextInstance.counter == 0 && DateTime.Now > NodeServerContextInstance.timeout)
                 {
                     NodeServerContextInstance = null;
                     process.Kill();
                     return;
                 }
             }
         }
     }
 }