• Daniel Black's avatar
    MDEV-15635 mysys: THR_LOCK_open reduce usage · 59785df5
    Daniel Black authored
    Change the following to statistic counters:
    * my_file_opened
    * my_file_total_opened
    * my_stream_opened
    * my_tmp_file_created
    
    There is one non-statistics use of my_file_opened/my_stream_opened
    in my_end which prints a warning if we shutdown and its still open.
    It seems excessive to hold locks to prevent this warning.
    
    A file descriptor is already a unique element per process - in Windows,
    protection occurs at fd allocation using THR_LOCK_open in my_win_{,f}open
    and in other OSes, a unique fd to file map exists at the OS level.
    So accesses to my_file_info[fd] don't need to be protected by the
    THR_LOCK_open.
    
    my_close/my_fclose where restructured to clear out the my_file_info
    before the close/my_win_close/my_win_fclose. After these calls another
    thread could gain the same file descriptor. So for Windows this
    the file_info elements available to the my_win_{,f}_open are released
    during the invalidate_fd call within my_win_close. No locking is needed
    as the my_win_{,f}open is searching for a invalidate entry which is
    determined by a single value change.
    
    my_fclose also changed for non-Windows to retry closing if EINTR was
    returned, same as my_close.
    
    Closes #657
    59785df5
my_fopen.c 7.17 KB