whisper : fix memory leak in whisper_batch

This commit is contained in:
Georgi Gerganov 2023-11-14 17:14:22 +02:00
parent 91096daa1a
commit 3d24e35f49
No known key found for this signature in database
GPG Key ID: 449E073F9DC10735

View File

@ -412,22 +412,22 @@ struct whisper_batch {
whisper_token * token;
whisper_pos * pos;
int32_t * n_seq_id;
whisper_seq_id ** seq_id;
whisper_seq_id ** seq_id; // null terminated
int8_t * logits;
};
static struct whisper_batch whisper_batch_init(int32_t n_tokens, int32_t n_seq_max) {
whisper_batch batch = { 0, nullptr, nullptr, nullptr, nullptr, nullptr, };
batch.token = (whisper_token *) malloc(sizeof(whisper_token) * n_tokens);
batch.token = (whisper_token * ) malloc(sizeof(whisper_token) * n_tokens);
batch.pos = (whisper_pos *) malloc(sizeof(whisper_pos) * n_tokens);
batch.n_seq_id = (int32_t *) malloc(sizeof(int32_t) * n_tokens);
batch.seq_id = (whisper_seq_id **) malloc(sizeof(whisper_seq_id *) * n_tokens);
batch.n_seq_id = (int32_t *) malloc(sizeof(int32_t) * n_tokens);
batch.seq_id = (whisper_seq_id **) malloc(sizeof(whisper_seq_id *) * n_tokens + 1);
for (int i = 0; i < n_tokens; ++i) {
batch.seq_id[i] = (whisper_seq_id *) malloc(sizeof(whisper_seq_id) * n_seq_max);
batch.seq_id[i] = (whisper_seq_id *) malloc(sizeof(whisper_seq_id) * n_seq_max);
}
batch.logits = (int8_t *) malloc(sizeof(int8_t) * n_tokens);
batch.seq_id[n_tokens] = nullptr;
batch.logits = (int8_t *) malloc(sizeof(int8_t) * n_tokens);
return batch;
}
@ -437,7 +437,7 @@ static void whisper_batch_free(struct whisper_batch batch) {
if (batch.pos) free(batch.pos);
if (batch.n_seq_id) free(batch.n_seq_id);
if (batch.seq_id) {
for (int i = 0; i < batch.n_tokens; ++i) {
for (int i = 0; batch.seq_id[i]; ++i) {
free(batch.seq_id[i]);
}
free(batch.seq_id);