potassco / clasp

⚙️ A conflict-driven nogood learning answer set solver

Home Page:https://potassco.org/clasp/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Propagator::check is called after auxiliary variables have been removed but before reiinitialization.

rkaminsk opened this issue · comments

There is a problem with the propagator. The attached example runs a trace resulting in a situation where Propagator::check is called after the solver removed auxiliary variables but before Propagate::init has been called to give the propagator a chance to remove those variables.

Looking at the trace, it seems like the "spurious" check call should simply be omitted. The application where this trace has been extracted seems to work if the check call is filtered manually.

The problem only seems to appear with multiple threads. The example triggers the behavior with two threads and is luckily quite short. 😉

@rkaminsk
I prepared a possible fix in branch https://github.com/potassco/clasp/tree/issue_52. Could you please check whether this fixes the issue for you?

It fixes the unit tests we have in our clingcon prototype. I'll do some more testing when back in Germany. So far looks good.

It seems to work. Please merge and thanks for fixing!

Merged to dev.