Esempio n. 1
0
 public static void CreateSystemsTableIndexes()
 {
     using (var schemalock = new SchemaLock())
     {
         CreateSystemsTableIndexesNoLock();
     }
 }
Esempio n. 2
0
 public static void ReplaceSystemsTable()                // PERFORM AFTER TEMP SYSTEM TABLE UPDATED
 {
     using (var slock = new SchemaLock())
     {
         using (var conn = new SQLiteConnectionSystem())
         {
             DropSystemsTableIndexes();
             using (var txn = conn.BeginTransaction())
             {
                 ExecuteQuery(conn, "DROP TABLE IF EXISTS Systems");
                 ExecuteQuery(conn, "DROP TABLE IF EXISTS EdsmSystems");
                 ExecuteQuery(conn, "DROP TABLE IF EXISTS SystemNames");
                 ExecuteQuery(conn, "ALTER TABLE EdsmSystems_temp RENAME TO EdsmSystems");
                 ExecuteQuery(conn, "ALTER TABLE SystemNames_temp RENAME TO SystemNames");
                 txn.Commit();
             }
             ExecuteQuery(conn, "VACUUM");
             CreateSystemsTableIndexesNoLock();
         }
     }
 }
        protected static void InitializeIfNeeded(Action initializer)
        {
            if (!_initialized)
            {
                int cur = Interlocked.Increment(ref _initsem);

                if (cur == 1)
                {
                    using (var slock = new SchemaLock())
                    {
                        _initbarrier.Set();
                        initializer();
                        _initialized = true;
                    }
                }

                if (!_initialized)
                {
                    _initbarrier.WaitOne();
                }
            }
        }
        protected static void InitializeIfNeeded(Action initializer)        // call this to get your initialiser called and to let it know its been initialised.
        {
            if (!initialized)
            {
                int cur = Interlocked.Increment(ref initsem);

                if (cur == 1)
                {
                    using (var slock = new SchemaLock())
                    {
                        initbarrier.Set();
                        initialized = true;     // stop any call backs thru this causing it to see it again
                        initializer();
                    }
                }

                if (!initialized)
                {
                    initbarrier.WaitOne();
                }
            }
        }