diff options
author | John Högberg <[email protected]> | 2018-11-16 09:52:39 +0100 |
---|---|---|
committer | John Högberg <[email protected]> | 2018-11-16 09:52:39 +0100 |
commit | 200c2718e16c9186f3b4cdccaf989a31946a3f20 (patch) | |
tree | ca57a19b37349a6d5aa742c38bf5d87147340b0c /erts/emulator/nifs/win32/win_prim_file.c | |
parent | cf8aae2646bc0c200d44577ca2942d3b53bd30e9 (diff) | |
parent | 7c902ed60b759c30aabfecde52baa2d12b8885bd (diff) | |
download | otp-200c2718e16c9186f3b4cdccaf989a31946a3f20.tar.gz otp-200c2718e16c9186f3b4cdccaf989a31946a3f20.tar.bz2 otp-200c2718e16c9186f3b4cdccaf989a31946a3f20.zip |
Merge branch 'john/erts/defer-orphan-file-close/OTP-15421/ERIERL-261' into maint
* john/erts/defer-orphan-file-close/OTP-15421/ERIERL-261:
Fix broken assertion on monitor release
Avoid closing files in gc/monitor callbacks
Diffstat (limited to 'erts/emulator/nifs/win32/win_prim_file.c')
-rw-r--r-- | erts/emulator/nifs/win32/win_prim_file.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/erts/emulator/nifs/win32/win_prim_file.c b/erts/emulator/nifs/win32/win_prim_file.c index 602a282dd1..d0aa70542f 100644 --- a/erts/emulator/nifs/win32/win_prim_file.c +++ b/erts/emulator/nifs/win32/win_prim_file.c @@ -466,18 +466,21 @@ posix_errno_t efile_open(const efile_path_t *path, enum efile_modes_t modes, } } -int efile_close(efile_data_t *d) { +int efile_close(efile_data_t *d, posix_errno_t *error) { efile_win_t *w = (efile_win_t*)d; HANDLE handle; + ASSERT(enif_thread_type() == ERL_NIF_THR_DIRTY_IO_SCHEDULER); ASSERT(erts_atomic32_read_nob(&d->state) == EFILE_STATE_CLOSED); ASSERT(w->handle != INVALID_HANDLE_VALUE); handle = w->handle; w->handle = INVALID_HANDLE_VALUE; + enif_release_resource(d); + if(!CloseHandle(handle)) { - w->common.posix_errno = windows_to_posix_errno(GetLastError()); + *error = windows_to_posix_errno(GetLastError()); return 0; } |