[Aptitude-devel] r3184 - in branches/aptitude-0.3/aptitude: . src/generic src/generic/problemresolver

Daniel Burrows dburrows@costa.debian.org
Fri, 29 Apr 2005 02:01:01 +0000


Author: dburrows
Date: Fri Apr 29 02:00:58 2005
New Revision: 3184

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.cc
   branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.h
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
Log:
More segfault fixing.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Fri Apr 29 02:00:58 2005
@@ -1,5 +1,11 @@
 2005-04-28  Daniel Burrows  <dburrows@debian.org>
 
+	* src/generic/aptitude_resolver.h, src/generic/aptitude_resolver.cc, src/generic/problemresolver/problemresolver.h:
+
+	  Fix a monumentally stupid decision (storing references to a
+	  universe in the problem resolver), fixing the segfault caused by
+	  the previous segfault's fix.
+
 	* src/cmdline/cmdline_dump_resolver.cc, src/generic/aptcache.cc, src/generic/aptitude_resolver.cc, src/generic/aptitude_resolver.h:
 
 	  Carry a backpointer to the cache around in all the resolver glue

Modified: branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.cc	Fri Apr 29 02:00:58 2005
@@ -25,8 +25,7 @@
 				     int max_successors,
 				     int resolution_score,
 				     aptitudeDepCache *cache)
-  :generic_problem_resolver<aptitude_universe>(step_penalty, broken_penalty, infinity, max_successors, resolution_score, aptitude_universe(cache)),
-   universe(cache)
+  :generic_problem_resolver<aptitude_universe>(step_penalty, broken_penalty, infinity, max_successors, resolution_score, aptitude_universe(cache))
 {
 }
 
@@ -37,11 +36,11 @@
 {
   // Should I stick with APT iterators instead?  This is a bit more
   // convenient, though..
-  for(aptitude_universe::package_iterator pi=aptitude_universe::package_iterator(universe.get_cache()->PkgBegin(), universe.get_cache());
+  for(aptitude_universe::package_iterator pi=aptitude_universe::package_iterator(get_universe().get_cache()->PkgBegin(), get_universe().get_cache());
       !pi.end(); ++pi)
     {
       const aptitude_universe::package &p=*pi;
-      aptitudeDepCache::aptitude_state &state=universe.get_cache()->get_ext_state(p.get_pkg());
+      aptitudeDepCache::aptitude_state &state=get_universe().get_cache()->get_ext_state(p.get_pkg());
 
       for(aptitude_universe::package::version_iterator vi=p.versions_begin(); !vi.end(); ++vi)
 	{
@@ -66,7 +65,7 @@
 	    add_version_score(v, keep_score);
 	  else if(v.get_ver().end())
 	    add_version_score(v, remove_score);
-	  else if(v.get_ver()==(*universe.get_cache())[p.get_pkg()].CandidateVerIter(*universe.get_cache()))
+	  else if(v.get_ver()==(*get_universe().get_cache())[p.get_pkg()].CandidateVerIter(*get_universe().get_cache()))
 	    {
 	      // Could try harder not to break holds.
 	      if(p.get_pkg().CurrentVer().end())
@@ -97,7 +96,7 @@
 					    int optional,
 					    int extra)
 {
-  for(aptitude_universe::package_iterator pi=aptitude_universe::package_iterator(universe.get_cache()->PkgBegin(), universe.get_cache());
+  for(aptitude_universe::package_iterator pi=aptitude_universe::package_iterator(get_universe().get_cache()->PkgBegin(), get_universe().get_cache());
       !pi.end(); ++pi)
     for(aptitude_universe::package::version_iterator vi=(*pi).versions_begin(); !vi.end(); ++vi)
       {

Modified: branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver.h	Fri Apr 29 02:00:58 2005
@@ -1252,7 +1252,6 @@
 
 class aptitude_resolver:public generic_problem_resolver<aptitude_universe>
 {
-  const aptitude_universe universe;
 public:
   aptitude_resolver(int step_score, int broken_score,
 		    int infinity, int max_successors,

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	Fri Apr 29 02:00:58 2005
@@ -512,7 +512,7 @@
   int full_solution_score;
 
   /** The universe in which we are solving problems. */
-  const PackageUniverse &universe;
+  const PackageUniverse universe;
 
   /** The internal scores to apply to individual package
    *  versions.
@@ -821,6 +821,11 @@
     delete[] version_scores;
   }
 
+  const PackageUniverse &get_universe()
+  {
+    return universe;
+  }
+
   /** Enables or disables debugging.  Debugging is initially
    *  disabled.
    */