mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
try to get rid of races in hostfs open()
In case of mode mismatch, do *not* blindly close the descriptor another openers might be using right now. Open the underlying file with currently sufficient mode, then * if current mode has grown so that it's sufficient for us now, just close our new fd * if current mode has grown and our fd is *not* enough to cover it, close and repeat. * otherwise, install our fd if the file hadn't been opened at all or dup2() our fd over the current one (and close our fd). Critical section is protected by mutex; yes, system-wide. All we do under it is a bunch of comparison and maybe an overwriting dup2() on host. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
f8d7e1877e
commit
f8ad850f11
3 changed files with 37 additions and 12 deletions
|
@ -160,6 +160,11 @@ int fsync_file(int fd, int datasync)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int replace_file(int oldfd, int fd)
|
||||
{
|
||||
return dup2(oldfd, fd);
|
||||
}
|
||||
|
||||
void close_file(void *stream)
|
||||
{
|
||||
close(*((int *) stream));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue