Skip to content
This repository was archived by the owner on Sep 27, 2021. It is now read-only.

Commit 8ed8bfa

Browse files
committed
fix finalizer problems
1 parent 6a01e58 commit 8ed8bfa

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

src/array.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,14 @@ similar(::Type{<: CLArray}, ::Type{T}, size::Base.Dims{N}) where {T, N} = CLArra
4242
function unsafe_free!(a::CLArray)
4343
ptr = pointer(a)
4444
ctxid = context(ptr).id
45-
if cl.is_ctx_id_alive(ctxid) && ctxid != C_NULL
46-
Mem.free(ptr)
45+
err = Mem.free(ptr)
46+
if err == cl.CL_SUCCESS
4747
Mem.current_allocated_mem[] -= sizeof(eltype(a)) * length(a)
48+
elseif err == cl.CL_INVALID_CONTEXT
49+
# ignore (log it!)
50+
else
51+
cl.@check err
4852
end
49-
#TODO logging that we don't free since context is not alive
5053
end
5154

5255
function unsafe_reinterpret(::Type{T}, A::CLArray{ET}, size::NTuple{N, Integer}) where {T, ET, N}

src/memory.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,16 @@ function convert{T}(::Type{OwnedPtr{T}}, p::OwnedPtr)
2424
end
2525

2626
function retain(p::OwnedPtr)
27-
cl.@check cl.api.clRetainMemObject(p)
28-
return
27+
err = cl.api.clRetainMemObject(p)
28+
return err
2929
end
3030

3131

3232

3333

3434
const current_allocated_mem = Ref(0)
3535
function free(p::OwnedPtr)
36-
cl.@check_release cl.api.clReleaseMemObject(p)
37-
return
36+
cl.api.clReleaseMemObject(p)
3837
end
3938

4039
function pressure_gc!(device, bytes)

0 commit comments

Comments
 (0)