Skip to content

Commit 3e40ef2

Browse files
committed
ref PULSEDEV-36792 openml-lightgbm: Identify and fix non-closed SWIG objects
1 parent 4006414 commit 3e40ef2

File tree

1 file changed

+32
-33
lines changed

1 file changed

+32
-33
lines changed

openml-lightgbm/lightgbm-provider/src/main/java/com/feedzai/openml/provider/lightgbm/LightGBMBinaryClassificationModelTrainer.java

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -130,21 +130,19 @@ static void fit(final Dataset dataset,
130130
final int numIterations = parseInt(params.get(NUM_ITERATIONS_PARAMETER_NAME));
131131
logger.debug("LightGBM model trainParams: {}", trainParams);
132132

133-
final SWIGTrainData swigTrainData = new SWIGTrainData(
134-
numFeatures,
135-
instancesPerChunk);
136-
final SWIGTrainBooster swigTrainBooster = new SWIGTrainBooster();
137133

138-
/// Create LightGBM dataset
139-
createTrainDataset(dataset, numFeatures, trainParams, swigTrainData);
134+
try (final SWIGTrainBooster swigTrainBooster = new SWIGTrainBooster();
135+
final SWIGTrainData swigTrainData = new SWIGTrainData(numFeatures, instancesPerChunk)){
136+
/// Create LightGBM dataset
137+
createTrainDataset(dataset, numFeatures, trainParams, swigTrainData);
140138

141-
/// Create Booster from dataset
142-
createBoosterStructure(swigTrainBooster, swigTrainData, trainParams);
143-
trainBooster(swigTrainBooster.swigBoosterHandle, numIterations);
139+
/// Create Booster from dataset
140+
createBoosterStructure(swigTrainBooster, swigTrainData, trainParams);
141+
trainBooster(swigTrainBooster.swigBoosterHandle, numIterations);
144142

145-
/// Save model
146-
saveModelFileToDisk(swigTrainBooster.swigBoosterHandle, outputModelFilePath);
147-
swigTrainBooster.close(); // Explicitly release C++ resources right away. They're no longer needed.
143+
/// Save model
144+
saveModelFileToDisk(swigTrainBooster.swigBoosterHandle, outputModelFilePath);
145+
}
148146
}
149147

150148
/**
@@ -231,28 +229,30 @@ private static void initializeLightGBMTrainDatasetFeatures(final SWIGTrainData s
231229

232230
/// First generate the array that has the chunk sizes for `LGBM_DatasetCreateFromMats`.
233231
final SWIGTYPE_p_int swigChunkSizesArray = genSWIGFeatureChunkSizesArray(swigTrainData, numFeatures);
234-
235-
/// Now create the LightGBM Dataset itself from the chunks:
236-
logger.debug("Creating LGBM_Dataset from chunked data...");
237-
final int returnCodeLGBM = lightgbmlib.LGBM_DatasetCreateFromMats(
238-
(int) swigTrainData.swigFeaturesChunkedArray.get_chunks_count(), // numChunks
239-
swigTrainData.swigFeaturesChunkedArray.data_as_void(), // input data (void**)
240-
lightgbmlibConstants.C_API_DTYPE_FLOAT64,
241-
swigChunkSizesArray,
242-
numFeatures,
243-
1, // rowMajor.
244-
trainParams, // parameters.
245-
null, // No alighment with other datasets.
246-
swigTrainData.swigOutDatasetHandlePtr // Output LGBM Dataset
247-
);
248-
if (returnCodeLGBM == -1) {
249-
logger.error("Could not create LightGBM dataset.");
250-
throw new LightGBMException();
232+
try {
233+
/// Now create the LightGBM Dataset itself from the chunks:
234+
logger.debug("Creating LGBM_Dataset from chunked data...");
235+
final int returnCodeLGBM = lightgbmlib.LGBM_DatasetCreateFromMats(
236+
(int) swigTrainData.swigFeaturesChunkedArray.get_chunks_count(), // numChunks
237+
swigTrainData.swigFeaturesChunkedArray.data_as_void(), // input data (void**)
238+
lightgbmlibConstants.C_API_DTYPE_FLOAT64,
239+
swigChunkSizesArray,
240+
numFeatures,
241+
1, // rowMajor.
242+
trainParams, // parameters.
243+
null, // No alighment with other datasets.
244+
swigTrainData.swigOutDatasetHandlePtr // Output LGBM Dataset
245+
);
246+
if (returnCodeLGBM == -1) {
247+
logger.error("Could not create LightGBM dataset.");
248+
throw new LightGBMException();
249+
}
250+
// FIXME is this init necessary?
251+
swigTrainData.initSwigDatasetHandle();
252+
} finally {
253+
lightgbmlib.delete_intArray(swigChunkSizesArray);
251254
}
252255

253-
swigTrainData.initSwigDatasetHandle();
254-
swigTrainData.destroySwigTrainFeaturesChunkedDataArray();
255-
lightgbmlib.delete_intArray(swigChunkSizesArray);
256256
}
257257

258258
/**
@@ -313,7 +313,6 @@ private static void setLightGBMDatasetLabelData(final SWIGTrainData swigTrainDat
313313
throw new LightGBMException();
314314
}
315315

316-
swigTrainData.destroySwigTrainLabelDataArray();
317316
}
318317

319318
/**

0 commit comments

Comments
 (0)