Skip to content

Commit 1044ec5

Browse files
author
Mikael Zayenz Lagerkvist
committed
Keep partial clone actor lists recoverable
1 parent 8338d9c commit 1044ec5

2 files changed

Lines changed: 10 additions & 4 deletions

File tree

gecode/kernel/core.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,7 @@ namespace Gecode {
749749
Actor* c = Actor::cast(a)->copy(*this);
750750
// Link copied actor
751751
p->next(ActorLink::cast(c)); ActorLink::cast(c)->prev(p);
752+
ActorLink::cast(c)->next(&pl); pl.prev(ActorLink::cast(c));
752753
// Note that forwarding is done in the constructors
753754
p = c;
754755
}
@@ -763,6 +764,7 @@ namespace Gecode {
763764
Actor* c = Actor::cast(a)->copy(*this);
764765
// Link copied actor
765766
p->next(ActorLink::cast(c)); ActorLink::cast(c)->prev(p);
767+
ActorLink::cast(c)->next(&bl); bl.prev(ActorLink::cast(c));
766768
// Note that forwarding is done in the constructors
767769
p = c;
768770
}

test/fault.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ namespace Test { namespace Fault {
192192
public:
193193
CloneCopySpace(void) {
194194
ThrowingPropagator::post(*this);
195+
ThrowingPropagator::post(*this);
196+
ThrowingBrancher::post(*this);
195197
ThrowingBrancher::post(*this);
196198
}
197199
CloneCopySpace(CloneCopySpace& s) : Space(s) {}
@@ -373,13 +375,13 @@ namespace Test { namespace Fault {
373375
}
374376
};
375377

376-
bool clone_after_failed_copy(Phase p) {
378+
bool clone_after_failed_copy(Phase p, unsigned long long n) {
377379
FaultScope scope;
378380
CloneCopySpace s;
379381
if (s.status() == SS_FAILED)
380382
return false;
381383
Support::FailPoint::reset();
382-
Support::FailPoint::fail_after(p,0);
384+
Support::FailPoint::fail_after(p,n);
383385
try {
384386
Space* c = s.clone();
385387
delete c;
@@ -1130,7 +1132,8 @@ namespace Test { namespace Fault {
11301132
ClonePropagatorCopy(void)
11311133
: Base("Fault::Clone::PropagatorCopy") {}
11321134
virtual bool run(void) {
1133-
return clone_after_failed_copy(Phase::PropagatorCopy);
1135+
return clone_after_failed_copy(Phase::PropagatorCopy,0) &&
1136+
clone_after_failed_copy(Phase::PropagatorCopy,1);
11341137
}
11351138
};
11361139

@@ -1139,7 +1142,8 @@ namespace Test { namespace Fault {
11391142
CloneBrancherCopy(void)
11401143
: Base("Fault::Clone::BrancherCopy") {}
11411144
virtual bool run(void) {
1142-
return clone_after_failed_copy(Phase::BrancherCopy);
1145+
return clone_after_failed_copy(Phase::BrancherCopy,0) &&
1146+
clone_after_failed_copy(Phase::BrancherCopy,1);
11431147
}
11441148
};
11451149

0 commit comments

Comments
 (0)