Esempio n. 1
0
        protected override void threadmain()
        {
            using (updateDB db = new updateDB(Program.connstr, Program.dbName))
            {
                // Read anything we queued in a previous run
                foreach (var alreadyClaimed in db.getClaimedUpdate())
                {
                    claimedUpdates.Enqueue(alreadyClaimed);
                }

                // Make sure we have at least highWaterMark updates queued (if they are available)
                while (claimedUpdates.Count < highWaterMark)
                {
                    wsusUpdate nextUpdate = db.startNextUpdate();
                    if (nextUpdate == null)
                    {
                        _allUpdatesExhausted = true;
                        exitTime             = true;
                        break;
                    }

                    claimedUpdates.Enqueue(nextUpdate);
                }

                while (true)
                {
                    // if we drop below the low water mark, queue updates until we get to the high water mark.
                    if (claimedUpdates.Count < lowWaterMark)
                    {
                        while (claimedUpdates.Count < highWaterMark)
                        {
                            wsusUpdate nextUpdate = db.startNextUpdate();
                            if (nextUpdate == null)
                            {
                                _allUpdatesExhausted = true;
                                exitTime             = true;
                                break;
                            }
                            claimedUpdates.Enqueue(nextUpdate);
                        }
                    }

                    if (exitTime)
                    {
                        // TODO: should we unmark what we have in progress before exiting?
                        break;
                    }
                    pollTimer.WaitOne(100);
                }
            }
        }