Skip to content
Permalink
Browse files

deps: uvwasi: cherry-pick 64e59d5

Original commit message:

    This commit ensures that multiple calls to uvwasi_destroy()
    are possible. Prior to this commit, subsequent calls to
    destroy() would abort because the file table's rwlock was
    incorrectly being destroyed multiple times.

PR-URL: #31076
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information
cjihrig authored and BridgeAR committed Dec 24, 2019
1 parent baf8730 commit a5937c7b6cf1833a6e31dd87039ba57a00d94852
Showing with 14 additions and 5 deletions.
  1. +14 −5 deps/uvwasi/src/fd_table.c
@@ -357,11 +357,20 @@ void uvwasi_fd_table_free(uvwasi_t* uvwasi, struct uvwasi_fd_table_t* table) {
uvwasi__free(uvwasi, entry);
}

uvwasi__free(uvwasi, table->fds);
table->fds = NULL;
table->size = 0;
table->used = 0;
uv_rwlock_destroy(&table->rwlock);
if (table->fds != NULL) {
/* It's fine to call uvwasi__free() multiple times on table->fds. However,
it is not fine to call uv_rwlock_destroy() multiple times. Guard against
that by ensuring that table->fds is not NULL. Technically, it's possible
that uvwasi_fd_table_init() initialized the rwlock successfully, but
failed to initialize fds. However, the only way that's possible is if
the application already ran out of memory.
*/
uvwasi__free(uvwasi, table->fds);
table->fds = NULL;
table->size = 0;
table->used = 0;
uv_rwlock_destroy(&table->rwlock);
}
}


0 comments on commit a5937c7

Please sign in to comment.
You can’t perform that action at this time.