Skip to content

Commit 1567bf5

Browse files
committed
add destructor for struct work
1 parent a5e8804 commit 1567bf5

File tree

8 files changed

+20
-12
lines changed

8 files changed

+20
-12
lines changed

include/bf.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ struct work {
373373
size_t struct_work_size(struct work *w);
374374
struct work *new_work_with_name(const char *prefix, const size_t prefix_len,
375375
const char *basename, const size_t basename_len);
376+
void free_work(struct work *w);
376377

377378
/* extra data used by entries that does not depend on data from other directories */
378379
struct entry_data {

src/bf.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -630,9 +630,11 @@ void dir_inc(struct dir_rc *dir) {
630630
* Decrement the reference count for a dir_rc, and free it if that was the last reference.
631631
*/
632632
void dir_dec(struct dir_rc *dir) {
633-
if (__atomic_sub_fetch(&dir->rc, 1, __ATOMIC_ACQ_REL) == 0) {
634-
closedir(dir->dir);
635-
free(dir);
633+
if (dir) {
634+
if (__atomic_sub_fetch(&dir->rc, 1, __ATOMIC_ACQ_REL) == 0) {
635+
closedir(dir->dir);
636+
free(dir);
637+
}
636638
}
637639
}
638640

@@ -675,3 +677,8 @@ struct work *new_work_with_name(const char *prefix, const size_t prefix_len,
675677

676678
return w;
677679
}
680+
681+
void free_work(struct work *w) {
682+
dir_dec(w->parent_dir);
683+
free(w);
684+
}

src/descend.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ int descend(QPTPool_t *ctx, const size_t id, void *args,
199199
}
200200
else {
201201
/* skip enqueuing and just free */
202-
free(child);
202+
free_work(child);
203203
}
204204
continue;
205205
}
@@ -215,7 +215,7 @@ int descend(QPTPool_t *ctx, const size_t id, void *args,
215215
}
216216
else {
217217
/* other types are not stored */
218-
free(child);
218+
free_work(child);
219219
continue;
220220
}
221221

@@ -239,7 +239,7 @@ int descend(QPTPool_t *ctx, const size_t id, void *args,
239239
}
240240
}
241241

242-
free(child);
242+
free_work(child);
243243
}
244244
}
245245

src/gufi_dir2index.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ static int processdir(QPTPool_t *ctx, const size_t id, void *data, void *args) {
323323
}
324324

325325
free(nda.topath);
326-
free(nda.work);
326+
free_work(nda.work);
327327

328328
return rc;
329329
}

src/gufi_dir2trace.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ static int processdir(QPTPool_t *ctx, const size_t id, void *data, void *args) {
178178
cleanup:
179179
closedir(dir);
180180

181-
free(work);
181+
free_work(work);
182182

183183
pa->total_files[id] += ctrs.nondirs_processed;
184184

src/gufi_index2dir.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ static int processdir(struct QPTPool * ctx, const size_t id, void * data, void *
357357

358358
closedir(dir);
359359

360-
free(work);
360+
free_work(work);
361361

362362
return rc;
363363
}

src/gufi_treesummary.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ static int processdir(QPTPool_t *ctx, const size_t id, void *data, void *args) {
211211
closedir(dir);
212212

213213
out_free:
214-
free(passmywork);
214+
free_work(passmywork);
215215

216216
return 0;
217217
}

src/parallel_cpr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ int main(int argc, char * argv[]) {
394394
cpr_link(work, &ed, &in);
395395
}
396396

397-
free(work);
397+
free_work(work);
398398
}
399399
else if (S_ISREG(st.st_mode)) {
400400
struct work_data *wd = calloc(1, sizeof(*wd) + work->name_len + 1);
@@ -410,7 +410,7 @@ int main(int argc, char * argv[]) {
410410

411411
QPTPool_enqueue(pool, 0, cpr_file, wd);
412412

413-
free(work);
413+
free_work(work);
414414
}
415415
else {
416416
free(work);

0 commit comments

Comments
 (0)