@@ -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