diff --git a/interfaces/daqp-julia/Project.toml b/interfaces/daqp-julia/Project.toml index 1bffee6..fc79260 100644 --- a/interfaces/daqp-julia/Project.toml +++ b/interfaces/daqp-julia/Project.toml @@ -1,7 +1,7 @@ name = "DAQPBase" uuid = "833476c3-a8c0-4073-9b64-6473509843fe" authors = ["Daniel Arnström "] -version = "0.3.3" +version = "0.3.4" [deps] DAQP_jll = "5c51c916-43bf-57fe-9d62-13064ebbf40d" diff --git a/interfaces/daqp-julia/src/api.jl b/interfaces/daqp-julia/src/api.jl index 504f2f9..d783114 100644 --- a/interfaces/daqp-julia/src/api.jl +++ b/interfaces/daqp-julia/src/api.jl @@ -193,21 +193,20 @@ end function solve(daqp::DAQPBase.Model) if(!daqp.has_model) return zeros(0), NaN, -10, [] end - result= Ref(DAQPResult(daqp.x,daqp.λ)); - - GC.@preserve result begin - ccall((:daqp_solve, DAQPBase.libdaqp), Nothing, - (Ref{DAQPBase.DAQPResult},Ref{DAQPBase.Workspace}), - result,daqp.work) - - info = (x = daqp.x, λ=daqp.λ, fval=result[].fval, - exitflag=result[].exitflag, - status = DAQPBase.flag2status[result[].exitflag], - solve_time = result[].solve_time, - setup_time = result[].setup_time, - iterations= result[].iter, nodes = result[].nodes) - return copy(daqp.x),result[].fval,result[].exitflag,info - end + result_ptr= Ref(DAQPResult(daqp.x,daqp.λ)); + + ccall((:daqp_solve, DAQPBase.libdaqp), Nothing, + (Ref{DAQPBase.DAQPResult},Ref{DAQPBase.Workspace}), + result_ptr,daqp.work) + + result = unsafe_load(Base.unsafe_convert(Ptr{DAQPResult}, result_ptr)) + info = (x = daqp.x, λ=daqp.λ, fval=result.fval, + exitflag=result.exitflag, + status = DAQPBase.flag2status[result.exitflag], + solve_time = result.solve_time, + setup_time = result.setup_time, + iterations= result.iter, nodes = result.nodes) + return copy(daqp.x),result.fval,result.exitflag,info end