Skip to content

Commit 47de8b8

Browse files
authored
Merge pull request #1742 from CEED/jeremy/fix-gen-leak
hip - fix minor leak
2 parents c4ab032 + 3efc994 commit 47de8b8

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

backends/hip-gen/ceed-hip-gen-operator.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,15 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
7575
if (eval_mode == CEED_EVAL_WEIGHT) { // Skip
7676
data->fields.inputs[i] = NULL;
7777
} else {
78+
bool is_active;
7879
CeedVector vec;
7980

8081
// Get input vector
8182
CeedCallBackend(CeedOperatorFieldGetVector(op_input_fields[i], &vec));
82-
if (vec == CEED_VECTOR_ACTIVE) vec = input_vec;
83+
is_active = vec == CEED_VECTOR_ACTIVE;
84+
if (is_active) vec = input_vec;
8385
CeedCallBackend(CeedVectorGetArrayRead(vec, CEED_MEM_DEVICE, &data->fields.inputs[i]));
86+
if (!is_active) CeedCallBackend(CeedVectorDestroy(&vec));
8487
}
8588
}
8689

@@ -90,14 +93,17 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
9093
if (eval_mode == CEED_EVAL_WEIGHT) { // Skip
9194
data->fields.outputs[i] = NULL;
9295
} else {
96+
bool is_active;
9397
CeedVector vec;
9498

9599
// Get output vector
96100
CeedCallBackend(CeedOperatorFieldGetVector(op_output_fields[i], &vec));
97-
if (vec == CEED_VECTOR_ACTIVE) vec = output_vec;
101+
is_active = vec == CEED_VECTOR_ACTIVE;
102+
if (is_active) vec = output_vec;
98103
output_vecs[i] = vec;
99104
// Check for multiple output modes
100105
CeedInt index = -1;
106+
101107
for (CeedInt j = 0; j < i; j++) {
102108
if (vec == output_vecs[j]) {
103109
index = j;
@@ -109,6 +115,7 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
109115
} else {
110116
data->fields.outputs[i] = data->fields.outputs[index];
111117
}
118+
if (!is_active) CeedCallBackend(CeedVectorDestroy(&vec));
112119
}
113120
}
114121

@@ -191,11 +198,14 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
191198
CeedCallBackend(CeedQFunctionFieldGetEvalMode(qf_input_fields[i], &eval_mode));
192199
if (eval_mode == CEED_EVAL_WEIGHT) { // Skip
193200
} else {
201+
bool is_active;
194202
CeedVector vec;
195203

196204
CeedCallBackend(CeedOperatorFieldGetVector(op_input_fields[i], &vec));
197-
if (vec == CEED_VECTOR_ACTIVE) vec = input_vec;
205+
is_active = vec == CEED_VECTOR_ACTIVE;
206+
if (is_active) vec = input_vec;
198207
CeedCallBackend(CeedVectorRestoreArrayRead(vec, &data->fields.inputs[i]));
208+
if (!is_active) CeedCallBackend(CeedVectorDestroy(&vec));
199209
}
200210
}
201211

@@ -204,10 +214,12 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
204214
CeedCallBackend(CeedQFunctionFieldGetEvalMode(qf_output_fields[i], &eval_mode));
205215
if (eval_mode == CEED_EVAL_WEIGHT) { // Skip
206216
} else {
217+
bool is_active;
207218
CeedVector vec;
208219

209220
CeedCallBackend(CeedOperatorFieldGetVector(op_output_fields[i], &vec));
210-
if (vec == CEED_VECTOR_ACTIVE) vec = output_vec;
221+
is_active = vec == CEED_VECTOR_ACTIVE;
222+
if (is_active) vec = output_vec;
211223
// Check for multiple output modes
212224
CeedInt index = -1;
213225

@@ -220,6 +232,7 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
220232
if (index == -1) {
221233
CeedCallBackend(CeedVectorRestoreArray(vec, &data->fields.outputs[i]));
222234
}
235+
if (!is_active) CeedCallBackend(CeedVectorDestroy(&vec));
223236
}
224237
}
225238

0 commit comments

Comments
 (0)