Skip to content

Commit 398cd4f

Browse files
authored
Fix diable_sigint for XPRSiisfirst (#333)
The IIS routine may callback into the user's callback, which re-enables sigint.
1 parent 9c15421 commit 398cd4f

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

src/MOI/MOI_wrapper.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4303,7 +4303,10 @@ end
43034303

43044304
function _getfirstiis(model::Optimizer)
43054305
status_code = Ref{Cint}(0)
4306-
ret = XPRSiisfirst(model, 1, status_code)
4306+
ret = disable_sigint() do
4307+
return XPRSiisfirst(model, 1, status_code)
4308+
end
4309+
_check_cb_exception(model)
43074310
_check(model, ret)
43084311
if status_code[] == 1 # The problem is actually feasible.
43094312
return IISData(status_code[], 0, 0, Cint[], Cint[], UInt8[], UInt8[])

test/test_MOI_wrapper.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,6 +2347,26 @@ function test_NLPLOG()
23472347
return
23482348
end
23492349

2350+
function test_issue_332()
2351+
model = Xpress.Optimizer()
2352+
MOI.set(model, MOI.Silent(), true)
2353+
MOI.set(model, MOI.RawOptimizerAttribute("PRESOLVE"), 0)
2354+
MOI.set(model, MOI.RawOptimizerAttribute("MIPPRESOLVE"), 0)
2355+
MOI.set(model, MOI.RawOptimizerAttribute("HEURSTRATEGY"), 0)
2356+
MOI.set(model, MOI.RawOptimizerAttribute("CUTSTRATEGY"), 0)
2357+
n = 10
2358+
x = MOI.add_variables(model, n)
2359+
MOI.add_constraint.(model, x, MOI.ZeroOne())
2360+
f = sum(2.0 * i * x[i] for i in 1:n)
2361+
c = MOI.add_constraint(model, f, MOI.EqualTo(2.0 * sum(1:n) - 1.0))
2362+
MOI.optimize!(model)
2363+
@test MOI.get(model, MOI.TerminationStatus()) == MOI.INFEASIBLE
2364+
MOI.compute_conflict!(model)
2365+
@test MOI.get(model, MOI.ConflictStatus()) == MOI.CONFLICT_FOUND
2366+
@test MOI.get(model, MOI.ConstraintConflictStatus(), c) == MOI.IN_CONFLICT
2367+
return
2368+
end
2369+
23502370
end # TestMOIWrapper
23512371

23522372
TestMOIWrapper.runtests()

0 commit comments

Comments
 (0)