diff options
Diffstat (limited to 'winsup/cygwin/fhandler_tape.cc')
-rw-r--r-- | winsup/cygwin/fhandler_tape.cc | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc index b251d700c..d3fd3eee2 100644 --- a/winsup/cygwin/fhandler_tape.cc +++ b/winsup/cygwin/fhandler_tape.cc @@ -1243,17 +1243,22 @@ fhandler_dev_tape::open (int flags, mode_t) int fhandler_dev_tape::close () { - int ret, cret; + int ret = 0; + int cret = 0; - lock (-1); - ret = mt->drive (driveno ())->close (get_handle (), is_rewind_device ()); + if (!hExeced) + { + lock (-1); + ret = mt->drive (driveno ())->close (get_handle (), is_rewind_device ()); + if (ret) + __seterrno_from_win_error (ret); + cret = fhandler_dev_raw::close (); + unlock (0); + } if (mt_evt) CloseHandle (mt_evt); CloseHandle (mt_mtx); - if (ret) - __seterrno_from_win_error (ret); - cret = fhandler_dev_raw::close (); - return unlock (ret ? -1 : cret); + return ret ? -1 : cret; } void |