This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: fsync bug


On Wed, Sep 21, 2011 at 03:07:21PM -0600, Eric Blake wrote:
>On 09/21/2011 02:54 PM, Christopher Faylor wrote:
>> On Wed, Sep 21, 2011 at 02:43:21PM -0600, Eric Blake wrote:
>>> fsync() is required to work on read-only fds (in theory, you can sync
>>> the atime metadata, which is a write operation triggered by a read-only
>>> fd).  But cygwin rejects this program, which works on Linux:
>>>
>>> $ cat foo.c
>>> #include<errno.h>
>>> #include<unistd.h>
>>> #include<stdio.h>
>>> #include<stdlib.h>
>>> #include<assert.h>
>>> #include<fcntl.h>
>>> int main (void)
>>> {
>>>    int fd = open("file", O_CREAT|O_EXCL|O_WRONLY, 0600);
>>>    if (fd<  0)
>>>      return 1;
>>>    if (close(fd))
>>>      return 2;
>>>    fd = open("file", O_RDONLY);
>>>    if (fd<  0)
>>>      return 3;
>>>    if (fsync(fd))
>>>      return 4;
>>>    if (unlink("file"))
>>>      return 5;
>>>    puts("success");
>>>    return 0;
>>> }
>>> $ rm -f file&&  ./foo; echo $?
>>> 4
>>
>> http://msdn.microsoft.com/en-us/library/aa364439%28VS.85%29.aspx
>
>So what's wrong with making fsync() a no-op for read-only fds, on the 
>grounds that windows doesn't give us a way to flush that data, so the 
>best emulation we can do is by ignoring the request rather than 
>propagating a spurious failure back to the user?

It's hard to see how lying that fsync worked would satisfy the
requirements to write metadata.  But, then, it isn't clear that this is
even an issue on Windows.

But, in any event, you know where the source code is.

cgf

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]