Skip to content

Commit d683965

Browse files
committed
implement freemodel!
- make sure that SCIP is not freed twice
1 parent 1d31d14 commit d683965

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/mpb_interface.jl

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ numvar(m::SCIPMathProgModel) = _getNumVars(m)
1818
"The number of proper constraints, excluding those from lazy callbacks."
1919
numconstr(m::SCIPMathProgModel) = _getNumConss(m)
2020

21-
freemodel!(m::SCIPMathProgModel) = error("Not implemented for SCIP.jl!")
21+
function freemodel!(m::SCIPMathProgModel)
22+
# call finalizer directly
23+
freescip(m.inner)
24+
end
2225

2326
# TODO: mapping for :SemiCont, :SemiInt
2427
const vartypemap = Dict{Symbol, Cint}(

src/types.jl

+7-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ type SCIPModel
2121
end
2222

2323
function freescip(m::SCIPModel)
24-
@assert m.ptr_model != C_NULL
25-
_freeModel(m)
24+
# avoid double free
25+
if m.ptr_model != C_NULL
26+
_freeModel(m)
27+
m.ptr_model = C_NULL
28+
else
29+
Base.warn_once("Tried to free already freed model, ignoring.")
30+
end
2631
end
2732

2833
# Linear Quadratic Model

0 commit comments

Comments
 (0)