-
-
Notifications
You must be signed in to change notification settings - Fork 33.8k
deps: update to uvwasi 0.0.5 #31432
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
deps: update to uvwasi 0.0.5 #31432
Conversation
deps/uvwasi/src/fd_table.c
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These unlocks and the ones at lines 383-384 look like a potential deadlock. You should normally release mutexes in reverse order of acquiring them.
Even when there's no deadlock it's probably still bad for performance because the acquirer can get rescheduled twice in case of contention.
deps/uvwasi/src/fd_table.c
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm also not 100% sure it's safe for this mutex's critical section and &table->rwlock to overlap (but it might be - I just can't tell from the diff. :-))
This version improves file descriptor renumbering, and as a result fixes uvwasi_fd_renumber().
Original commit message:
unlock all fd mutexes in reverse order
Some functions acquire mutexes for multiple file descriptors.
This commit ensures that the mutexes are released in the
reverse order that they are aquired.
Original commit message:
prevent locking fd table while holding a mutex
uvwasi_path_rename(), uvwasi_path_link(),
uvwasi_path_open(), and uvwasi_fd_renumber() operate
on multiple file descriptors. uvwasi_fd_renumber() has
been updated prior to this commit, and is not relevant
here. The other three functions would perform the
following locking operations:
- lock the file table
- acquire a file descriptor mutex
- unlock the file table
- unlock the file table again
- acquire another file descriptor mutex
- unlock the file table
- unlock the two mutexes
Attempting to acquire the second mutex introduced
the possibility of deadlock because another thread
could attempt to acquire the first mutex while
holding the file table lock.
This commit ensures that multiple mutexes are either:
- acquired in a single lock of the file table
- or, only acquired after releasing previously held mutexes
Fixes: nodejs/uvwasi#89
Original commit message:
prevent race conditions with uvwasi_fd_close()
uvwasi_fd_close() performed the following operations:
- lock the file descriptor mutex
- close the file
- release the file descriptor mutex
- call the file table's remove() function
Once the fd's mutex is released, another thread could
acquire it before the fd is removed from the file
table. If this happens, remove() could destroy a held
mutex.
This commit updates uvwasi_fd_close() to perform the
entire sequence while holding the file table's lock,
preventing new acquisitions of the fd's mutex.
Fixes: nodejs/uvwasi#88
This test provides missing coverage for __wasi_fd_renumber().
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Landed in c692568...96058f3 |
This version improves file descriptor renumbering, and as a result fixes uvwasi_fd_renumber(). PR-URL: nodejs#31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
unlock all fd mutexes in reverse order
Some functions acquire mutexes for multiple file descriptors.
This commit ensures that the mutexes are released in the
reverse order that they are aquired.
PR-URL: nodejs#31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent locking fd table while holding a mutex
uvwasi_path_rename(), uvwasi_path_link(),
uvwasi_path_open(), and uvwasi_fd_renumber() operate
on multiple file descriptors. uvwasi_fd_renumber() has
been updated prior to this commit, and is not relevant
here. The other three functions would perform the
following locking operations:
- lock the file table
- acquire a file descriptor mutex
- unlock the file table
- unlock the file table again
- acquire another file descriptor mutex
- unlock the file table
- unlock the two mutexes
Attempting to acquire the second mutex introduced
the possibility of deadlock because another thread
could attempt to acquire the first mutex while
holding the file table lock.
This commit ensures that multiple mutexes are either:
- acquired in a single lock of the file table
- or, only acquired after releasing previously held mutexes
Fixes: nodejs/uvwasi#89
PR-URL: nodejs#31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent race conditions with uvwasi_fd_close()
uvwasi_fd_close() performed the following operations:
- lock the file descriptor mutex
- close the file
- release the file descriptor mutex
- call the file table's remove() function
Once the fd's mutex is released, another thread could
acquire it before the fd is removed from the file
table. If this happens, remove() could destroy a held
mutex.
This commit updates uvwasi_fd_close() to perform the
entire sequence while holding the file table's lock,
preventing new acquisitions of the fd's mutex.
Fixes: nodejs/uvwasi#88
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
This test provides missing coverage for __wasi_fd_renumber(). PR-URL: nodejs#31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
This version improves file descriptor renumbering, and as a result fixes uvwasi_fd_renumber(). PR-URL: #31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
unlock all fd mutexes in reverse order
Some functions acquire mutexes for multiple file descriptors.
This commit ensures that the mutexes are released in the
reverse order that they are aquired.
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent locking fd table while holding a mutex
uvwasi_path_rename(), uvwasi_path_link(),
uvwasi_path_open(), and uvwasi_fd_renumber() operate
on multiple file descriptors. uvwasi_fd_renumber() has
been updated prior to this commit, and is not relevant
here. The other three functions would perform the
following locking operations:
- lock the file table
- acquire a file descriptor mutex
- unlock the file table
- unlock the file table again
- acquire another file descriptor mutex
- unlock the file table
- unlock the two mutexes
Attempting to acquire the second mutex introduced
the possibility of deadlock because another thread
could attempt to acquire the first mutex while
holding the file table lock.
This commit ensures that multiple mutexes are either:
- acquired in a single lock of the file table
- or, only acquired after releasing previously held mutexes
Fixes: nodejs/uvwasi#89
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent race conditions with uvwasi_fd_close()
uvwasi_fd_close() performed the following operations:
- lock the file descriptor mutex
- close the file
- release the file descriptor mutex
- call the file table's remove() function
Once the fd's mutex is released, another thread could
acquire it before the fd is removed from the file
table. If this happens, remove() could destroy a held
mutex.
This commit updates uvwasi_fd_close() to perform the
entire sequence while holding the file table's lock,
preventing new acquisitions of the fd's mutex.
Fixes: nodejs/uvwasi#88
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
This test provides missing coverage for __wasi_fd_renumber(). PR-URL: #31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
This version improves file descriptor renumbering, and as a result fixes uvwasi_fd_renumber(). PR-URL: #31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
unlock all fd mutexes in reverse order
Some functions acquire mutexes for multiple file descriptors.
This commit ensures that the mutexes are released in the
reverse order that they are aquired.
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent locking fd table while holding a mutex
uvwasi_path_rename(), uvwasi_path_link(),
uvwasi_path_open(), and uvwasi_fd_renumber() operate
on multiple file descriptors. uvwasi_fd_renumber() has
been updated prior to this commit, and is not relevant
here. The other three functions would perform the
following locking operations:
- lock the file table
- acquire a file descriptor mutex
- unlock the file table
- unlock the file table again
- acquire another file descriptor mutex
- unlock the file table
- unlock the two mutexes
Attempting to acquire the second mutex introduced
the possibility of deadlock because another thread
could attempt to acquire the first mutex while
holding the file table lock.
This commit ensures that multiple mutexes are either:
- acquired in a single lock of the file table
- or, only acquired after releasing previously held mutexes
Fixes: nodejs/uvwasi#89
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent race conditions with uvwasi_fd_close()
uvwasi_fd_close() performed the following operations:
- lock the file descriptor mutex
- close the file
- release the file descriptor mutex
- call the file table's remove() function
Once the fd's mutex is released, another thread could
acquire it before the fd is removed from the file
table. If this happens, remove() could destroy a held
mutex.
This commit updates uvwasi_fd_close() to perform the
entire sequence while holding the file table's lock,
preventing new acquisitions of the fd's mutex.
Fixes: nodejs/uvwasi#88
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
This test provides missing coverage for __wasi_fd_renumber(). PR-URL: #31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
This version improves file descriptor renumbering, and as a result fixes uvwasi_fd_renumber(). PR-URL: #31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
unlock all fd mutexes in reverse order
Some functions acquire mutexes for multiple file descriptors.
This commit ensures that the mutexes are released in the
reverse order that they are aquired.
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent locking fd table while holding a mutex
uvwasi_path_rename(), uvwasi_path_link(),
uvwasi_path_open(), and uvwasi_fd_renumber() operate
on multiple file descriptors. uvwasi_fd_renumber() has
been updated prior to this commit, and is not relevant
here. The other three functions would perform the
following locking operations:
- lock the file table
- acquire a file descriptor mutex
- unlock the file table
- unlock the file table again
- acquire another file descriptor mutex
- unlock the file table
- unlock the two mutexes
Attempting to acquire the second mutex introduced
the possibility of deadlock because another thread
could attempt to acquire the first mutex while
holding the file table lock.
This commit ensures that multiple mutexes are either:
- acquired in a single lock of the file table
- or, only acquired after releasing previously held mutexes
Fixes: nodejs/uvwasi#89
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
Original commit message:
prevent race conditions with uvwasi_fd_close()
uvwasi_fd_close() performed the following operations:
- lock the file descriptor mutex
- close the file
- release the file descriptor mutex
- call the file table's remove() function
Once the fd's mutex is released, another thread could
acquire it before the fd is removed from the file
table. If this happens, remove() could destroy a held
mutex.
This commit updates uvwasi_fd_close() to perform the
entire sequence while holding the file table's lock,
preventing new acquisitions of the fd's mutex.
Fixes: nodejs/uvwasi#88
PR-URL: #31432
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: David Carlier <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
Reviewed-By: Jiawen Geng <[email protected]>
This test provides missing coverage for __wasi_fd_renumber(). PR-URL: #31432 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Jiawen Geng <[email protected]>
This update improves file descriptor renumbering, and as a result fixes
uvwasi_fd_renumber()(which was broken on FreeBSD). Missinguvwasi_fd_renumber()test coverage is also added via anfreopen()test.Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passes