Nondeterministic crash
Opened this issue · 7 comments
I am having a very hard time creating a minimal crashing example for this bug because it is nonderterministic. If I execute 2 times the same code it can crash and then work perfectly. If I had or remove one line that has nothing to do with the crash, it can stop crashing at all (that is what makes it difficult to make a minimal example).
The error I get is
ERROR: LoadError: LoadError: BoundsError: attempt to access ()
at index [0]
[inlined code] from tuple.jl:8
in _fill_tuples_expr at /home/blegat/.julia/v0.5/FixedSizeArrays/src/constructors.jl:4
in fill_tuples_expr at /home/blegat/.julia/v0.5/FixedSizeArrays/src/constructors.jl:6
in map at /home/blegat/.julia/v0.5/FixedSizeArrays/src/mapreduce.jl:78
[inlined code] from /home/blegat/.julia/v0.5/FixedSizeArrays/src/ops.jl:89
in normalize at /home/blegat/.julia/v0.5/FixedSizeArrays/src/ops.jl:138
in map! at abstractarray.jl:1293
in fulldecompose at /home/blegat/.julia/v0.5/Polyhedra/src/decompose.jl:237
in decompose at /home/blegat/.julia/v0.5/Polyhedra/src/decompose.jl:254
in call at /home/blegat/.julia/v0.5/GeometryTypes/src/primitives.jl:18
in include at ./boot.jl:260
in include_from_node1 at ./loading.jl:392
in include at ./boot.jl:260
in include_from_node1 at ./loading.jl:392
in process_options at ./client.jl:277
in _start at ./client.jl:377
With the code
A = [-1 0 0;
0 -4 0;
0 0 -3;
1 0 0
0 2 0
0 0 3
1 1 1
-1 0 0
0 -1 0
0 0 -1]
b = [-40;
-75;
-33;
100;
100;
100;
100;
0;
0;
0]
eqs = IntSet([])
include("common.jl")
where common.jl
is
using Polyhedra
using CDDLib
using GeometryTypes
using GLVisualize
using GLAbstraction
ine = InequalityDescription(A, b)
poly = CDDPolyhedron{3,Rational{BigInt}}(ine)
w = glscreen()
mesh = GLNormalMesh(poly)
view(visualize(mesh, model=scalematrix(Vec3f0(0.03))), w)
renderloop(w)
The moment it fails is when I do map!(normalize, ns)
where ns
contains normals. If I replace it with map(normalize, ns)
, it also fails.
What could it be ? Maybe is it because the normals in ns
shares Rational{BigInt}
using the same reference ? I don't know... Do you have any idea ?
Are you on a very new version of Julia 0.5?
Not that new: Version 0.5.0-dev+1491 (2015-11-27 16:54 UTC) Commit 41fb1ba (109 days old master)
so I guess this happens in mesh = GLNormalMesh(poly)
?
Yes, exactly
can you break this down, so that I can try to reproduce it? Like this I have no chance!
Alternatively, you can try to just replace normalize with your own implementation (should be very quick) and see if the problem remains.
Yes I'll try to break this down but as I said, as soon as I change something the problem disappear :(
I'll tell you when I have something more precise ;)
I have been able to simplify a bit. It fails 100% of the time with the following code
using Polyhedra
using CDDLib
V = [ 1 0 -1/sqrt(2);
-1 0 -1/sqrt(2);
0 1 1/sqrt(2);
0 -1 1/sqrt(2)]
ext = GeneratorDescription(V)
poly = polyhedron(ext)
using GeometryTypes
mesh = GLNormalMesh(poly)
even if I remplace fulldecompose
of Polyhedra/src/decompose.jl
by the following:
function fulldecompose{T}(poly::Polyhedron{3,T})
ntri = 4
points = Vector{FixedSizeArrays.Point{3,Float64}}(3*ntri)
faces = Vector{GeometryTypes.Face{3,Int,0}}(ntri)
ns = Vector{GeometryTypes.Normal{3,Float64}}(3*ntri)
map!(v -> v, ns)
(points, faces, ns)
end
Surprisingly enough, if I do not allocate points
and faces
in fulldecompose, it does not fail. I have also tried to execute the code of fulldecompose
out of the package Polyhedra
but then it does not fail anymore :(
Of course, I realize that it does not make the problem a lot easier to solve... Maybe it will be fixed when Julia 0.5 is released so we might just wait and see :-P