Skip to content

Commit a058b77

Browse files
committed
Switched to AutoPointer for Dataset [skip ci]
1 parent 99b6baa commit a058b77

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

lib/lightgbm/dataset.rb

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,7 @@ def subset(used_indices, params: nil)
108108
end
109109

110110
def handle_pointer
111-
@handle.read_pointer
112-
end
113-
114-
def self.finalize(addr)
115-
# must use proc instead of stabby lambda
116-
proc { FFI.LGBM_DatasetFree(::FFI::Pointer.new(:pointer, addr)) }
111+
@handle
117112
end
118113

119114
private
@@ -129,15 +124,15 @@ def construct
129124
end
130125
set_verbosity(params)
131126

132-
@handle = ::FFI::MemoryPointer.new(:pointer)
127+
handle = ::FFI::MemoryPointer.new(:pointer)
133128
parameters = params_str(params)
134129
reference = @reference.handle_pointer if @reference
135130
if used_indices
136131
used_row_indices = ::FFI::MemoryPointer.new(:int32, used_indices.count)
137132
used_row_indices.write_array_of_int32(used_indices)
138-
check_result FFI.LGBM_DatasetGetSubset(reference, used_row_indices, used_indices.count, parameters, @handle)
133+
check_result FFI.LGBM_DatasetGetSubset(reference, used_row_indices, used_indices.count, parameters, handle)
139134
elsif data.is_a?(String)
140-
check_result FFI.LGBM_DatasetCreateFromFile(data, parameters, reference, @handle)
135+
check_result FFI.LGBM_DatasetCreateFromFile(data, parameters, reference, handle)
141136
else
142137
if matrix?(data)
143138
nrow = data.row_count
@@ -171,9 +166,13 @@ def construct
171166
c_data.write_array_of_double(flat_data)
172167
end
173168

174-
check_result FFI.LGBM_DatasetCreateFromMat(c_data, 1, nrow, ncol, 1, parameters, reference, @handle)
169+
check_result FFI.LGBM_DatasetCreateFromMat(c_data, 1, nrow, ncol, 1, parameters, reference, handle)
170+
end
171+
if used_indices
172+
@handle = handle.read_pointer
173+
else
174+
@handle = ::FFI::AutoPointer.new(handle.read_pointer, FFI.method(:LGBM_DatasetFree))
175175
end
176-
ObjectSpace.define_finalizer(@handle, self.class.finalize(handle_pointer.to_i)) unless used_indices
177176

178177
self.label = @label if @label
179178
self.weight = @weight if @weight

0 commit comments

Comments
 (0)