Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/08/11 00:04:16 (13 years ago)
Author:
cneumuel
Message:

#1233

  • locking for childHiveJobs in OptimizerHiveJob avoid multi threaded access issues
  • added IsPrivileged to gui
  • minor changes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/OptimizerHiveJob.cs

    r6373 r6381  
    129129    private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    130130      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    131         foreach (var item in e.Items) {
    132           if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
    133             this.childHiveJobs.Add(new OptimizerHiveJob(item.Value));
    134           }
    135         }
     131        childHiveJobsLock.EnterWriteLock();
     132        try {
     133          foreach (var item in e.Items) {
     134            if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
     135              this.childHiveJobs.Add(new OptimizerHiveJob(item.Value));
     136            }
     137          }
     138        }
     139        finally { childHiveJobsLock.ExitWriteLock(); }
    136140      }
    137141    }
    138142    private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    139143      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    140         foreach (var item in e.OldItems) {
    141           this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
    142         }
    143         foreach (var item in e.Items) {
    144           if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
    145             this.childHiveJobs.Add(new OptimizerHiveJob(item.Value));
    146           }
    147         }
     144        childHiveJobsLock.EnterWriteLock();
     145        try {
     146          foreach (var item in e.OldItems) {
     147            this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
     148          }
     149          foreach (var item in e.Items) {
     150            if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
     151              this.childHiveJobs.Add(new OptimizerHiveJob(item.Value));
     152            }
     153          }
     154        }
     155        finally { childHiveJobsLock.ExitWriteLock(); }
    148156      }
    149157    }
    150158    private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    151159      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    152         foreach (var item in e.Items) {
    153           this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
    154         }
     160        childHiveJobsLock.EnterWriteLock();
     161        try {
     162          foreach (var item in e.Items) {
     163            this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
     164          }
     165        }
     166        finally { childHiveJobsLock.ExitWriteLock(); }
    155167      }
    156168    }
    157169    private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
    158170      if (syncJobsWithOptimizers && this.ItemJob.ComputeInParallel) {
    159         foreach (var item in e.Items) {
    160           this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
    161         }
     171        childHiveJobsLock.EnterWriteLock();
     172        try {
     173          foreach (var item in e.Items) {
     174            this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
     175          }
     176        }
     177        finally { childHiveJobsLock.ExitWriteLock(); }
    162178      }
    163179    }
     
    182198
    183199      OptimizerHiveJob child = (OptimizerHiveJob)this.ChildHiveJobs.Single(j => j.Job.Id == childJobId);
    184       if (!optimizerJob.ComputeInParallel) {
    185         child.syncJobsWithOptimizers = false;
    186         child.ItemJob = optimizerJob;
    187         child.syncJobsWithOptimizers = true;
    188       }
     200      childHiveJobsLock.EnterReadLock();
     201      try {
     202        if (!optimizerJob.ComputeInParallel) {
     203          child.syncJobsWithOptimizers = false;
     204          child.ItemJob = optimizerJob;
     205          child.syncJobsWithOptimizers = true;
     206        }
     207      }
     208      finally { childHiveJobsLock.ExitReadLock(); }
    189209      syncJobsWithOptimizers = true;
    190210    }
     
    243263        }
    244264      }
    245       foreach (OptimizerHiveJob child in childHiveJobs) {
    246         child.SetIndexInParentOptimizerList(this);
    247       }
     265      childHiveJobsLock.EnterReadLock();
     266      try {
     267        foreach (OptimizerHiveJob child in childHiveJobs) {
     268          child.SetIndexInParentOptimizerList(this);
     269        }
     270      }
     271      finally { childHiveJobsLock.ExitReadLock(); }
    248272    }
    249273
     
    302326      }
    303327
    304       JobData jobData = new JobData() {
    305         JobId = job.Id,
    306         Data = jobByteArray
    307       };
    308 
     328      JobData jobData = new JobData() { JobId = job.Id, Data = jobByteArray };
    309329      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
    310 
    311330      return jobData;
    312331    }
    313332
    314333    public OptimizerHiveJob GetChildByOptimizerJob(OptimizerJob optimizerJob) {
    315       foreach (OptimizerHiveJob child in ChildHiveJobs) {
    316         if (child.ItemJob == optimizerJob)
    317           return child;
    318       }
    319       return null;
     334      childHiveJobsLock.EnterReadLock();
     335      try {
     336        foreach (OptimizerHiveJob child in childHiveJobs) {
     337          if (child.ItemJob == optimizerJob)
     338            return child;
     339        }
     340        return null;
     341      }
     342      finally { childHiveJobsLock.ExitReadLock(); }
    320343    }
    321344
    322345    public HiveJob<OptimizerJob> GetChildByOptimizer(IOptimizer optimizer) {
    323       foreach (OptimizerHiveJob child in ChildHiveJobs) {
    324         if (child.ItemJob.Item == optimizer)
    325           return child;
    326       }
    327       return null;
     346      childHiveJobsLock.EnterReadLock();
     347      try {
     348        foreach (OptimizerHiveJob child in childHiveJobs) {
     349          if (child.ItemJob.Item == optimizer)
     350            return child;
     351        }
     352        return null;
     353      }
     354      finally { childHiveJobsLock.ExitReadLock(); }
    328355    }
    329356
Note: See TracChangeset for help on using the changeset viewer.