public List<string> GetUserTableNamesStartingWith(string mask)
{
List<string> ret = new List<string>();
//No lock here, while IterateForwardStartsWith of the LTrie is safe (new root is created), and we don't acquire value from the key (which could be delete).
//_sync_openTablesHolder.EnterReadLock();
//try
//{
byte[] btKeyName = Encoding.UTF8.GetBytes("@ut" + mask);
foreach (var row in LTrie.IterateForwardStartsWith(btKeyName))
{
//try //try-catch could be necessary in case if we acquire value, which was deleted by other thread. Here we don't acquire value.
//{
ret.Add(System.Text.Encoding.UTF8.GetString(row.Key).Substring(3));
//}
//catch
//{}
}
//}
//finally
//{
// _sync_openTablesHolder.ExitReadLock();
//}
return ret;
}