mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 11:14:58 -06:00
Merge pull request #355 from sebres/fix-mem-leak-brotlimt
Fix memory leak in brotlimt
This commit is contained in:
@@ -480,6 +480,15 @@ size_t BROTLIMT_compressCCtx(BROTLIMT_CCtx * ctx, BROTLIMT_RdWr_t * rdwr)
|
||||
retval_of_thread = p;
|
||||
}
|
||||
|
||||
/* move remaining done/busy entries to free list */
|
||||
while (!list_empty(&ctx->writelist_done)) {
|
||||
struct list_head *entry = list_first(&ctx->writelist_done);
|
||||
list_move(entry, &ctx->writelist_free);
|
||||
}
|
||||
while (!list_empty(&ctx->writelist_busy)) {
|
||||
struct list_head* entry = list_first(&ctx->writelist_busy);
|
||||
list_move(entry, &ctx->writelist_free);
|
||||
}
|
||||
/* clean up lists */
|
||||
while (!list_empty(&ctx->writelist_free)) {
|
||||
struct writelist *wl;
|
||||
|
||||
@@ -363,12 +363,7 @@ static void *pt_decompress(void *arg)
|
||||
}
|
||||
|
||||
/* everything is okay */
|
||||
pthread_mutex_lock(&ctx->write_mutex);
|
||||
list_move(&wl->node, &ctx->writelist_free);
|
||||
pthread_mutex_unlock(&ctx->write_mutex);
|
||||
if (in->allocated)
|
||||
free(in->buf);
|
||||
return 0;
|
||||
result = 0;
|
||||
|
||||
error_lock:
|
||||
pthread_mutex_lock(&ctx->write_mutex);
|
||||
@@ -508,8 +503,8 @@ size_t BROTLIMT_decompressDCtx(BROTLIMT_DCtx * ctx, BROTLIMT_RdWr_t * rdwr)
|
||||
/* no pthread_create() needed! */
|
||||
void *p = pt_decompress(w);
|
||||
if (p)
|
||||
return (size_t) p;
|
||||
goto okay;
|
||||
retval_of_thread = p;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* multi threaded */
|
||||
@@ -530,7 +525,16 @@ size_t BROTLIMT_decompressDCtx(BROTLIMT_DCtx * ctx, BROTLIMT_RdWr_t * rdwr)
|
||||
retval_of_thread = p;
|
||||
}
|
||||
|
||||
okay:
|
||||
done:
|
||||
/* move remaining done/busy entries to free list */
|
||||
while (!list_empty(&ctx->writelist_done)) {
|
||||
struct list_head *entry = list_first(&ctx->writelist_done);
|
||||
list_move(entry, &ctx->writelist_free);
|
||||
}
|
||||
while (!list_empty(&ctx->writelist_busy)) {
|
||||
struct list_head* entry = list_first(&ctx->writelist_busy);
|
||||
list_move(entry, &ctx->writelist_free);
|
||||
}
|
||||
/* clean up the buffers */
|
||||
while (!list_empty(&ctx->writelist_free)) {
|
||||
struct writelist *wl;
|
||||
|
||||
Reference in New Issue
Block a user