/// <exception cref="System.Exception"/>
 private void IncrSharedCount(SharedCount sharedCount)
 {
     while (true)
     {
         // Loop until we successfully increment the counter
         VersionedValue <int> versionedValue = sharedCount.GetVersionedValue();
         if (sharedCount.TrySetCount(versionedValue, versionedValue.GetValue() + 1))
         {
             break;
         }
     }
 }
 /// <exception cref="System.IO.IOException"/>
 public override void StartThreads()
 {
     if (!isExternalClient)
     {
         try
         {
             zkClient.Start();
         }
         catch (Exception e)
         {
             throw new IOException("Could not start Curator Framework", e);
         }
     }
     else
     {
         // If namespace parents are implicitly created, they won't have ACLs.
         // So, let's explicitly create them.
         CuratorFramework nullNsFw = zkClient.UsingNamespace(null);
         EnsurePath       ensureNs = nullNsFw.NewNamespaceAwareEnsurePath("/" + zkClient.GetNamespace
                                                                              ());
         try
         {
             ensureNs.Ensure(nullNsFw.GetZookeeperClient());
         }
         catch (Exception e)
         {
             throw new IOException("Could not create namespace", e);
         }
     }
     listenerThreadPool = Executors.NewSingleThreadExecutor();
     try
     {
         delTokSeqCounter = new SharedCount(zkClient, ZkDtsmSeqnumRoot, 0);
         if (delTokSeqCounter != null)
         {
             delTokSeqCounter.Start();
         }
     }
     catch (Exception e)
     {
         throw new IOException("Could not start Sequence Counter", e);
     }
     try
     {
         keyIdSeqCounter = new SharedCount(zkClient, ZkDtsmKeyidRoot, 0);
         if (keyIdSeqCounter != null)
         {
             keyIdSeqCounter.Start();
         }
     }
     catch (Exception e)
     {
         throw new IOException("Could not start KeyId Counter", e);
     }
     try
     {
         CreatePersistentNode(ZkDtsmMasterKeyRoot);
         CreatePersistentNode(ZkDtsmTokensRoot);
     }
     catch (Exception)
     {
         throw new RuntimeException("Could not create ZK paths");
     }
     try
     {
         keyCache = new PathChildrenCache(zkClient, ZkDtsmMasterKeyRoot, true);
         if (keyCache != null)
         {
             keyCache.Start(PathChildrenCache.StartMode.BuildInitialCache);
             keyCache.GetListenable().AddListener(new _PathChildrenCacheListener_340(this), listenerThreadPool
                                                  );
         }
     }
     catch (Exception e)
     {
         throw new IOException("Could not start PathChildrenCache for keys", e);
     }
     try
     {
         tokenCache = new PathChildrenCache(zkClient, ZkDtsmTokensRoot, true);
         if (tokenCache != null)
         {
             tokenCache.Start(PathChildrenCache.StartMode.BuildInitialCache);
             tokenCache.GetListenable().AddListener(new _PathChildrenCacheListener_368(this),
                                                    listenerThreadPool);
         }
     }
     catch (Exception e)
     {
         throw new IOException("Could not start PathChildrenCache for tokens", e);
     }
     base.StartThreads();
 }