From: | "Merlin Moncure" <merlin(dot)moncure(at)rcsonline(dot)com> |
---|---|
To: | "Andrew Dunstan" <andrew(at)dunslane(dot)net> |
Cc: | <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Win32 and fsync() |
Date: | 2003-02-03 23:00:26 |
Message-ID: | 303E00EBDD07B943924382E153890E5433F7C0@cuthbert.rcsinc.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
>I'm having difficulty digging up the reference, but I think I recall
seeing >something that said, roughly, on W32 there are 2 sets of buffers
- those in >the user level library and those in the kernel level driver,
and >FlushFileBuffers drains the first, while _commit drains both (it
includes a >call to FlushFileBuffers).
You were correct: here is the source.
int __cdecl _commit (
int filedes
)
{
int retval;
/* if filedes out of range, complain */
if ( ((unsigned)filedes >= (unsigned)_nhandle) ||
!(_osfile(filedes) & FOPEN) )
{
errno = EBADF;
return (-1);
}
_lock_fh(filedes);
/* if filedes open, try to commit, else fall through to bad */
if (_osfile(filedes) & FOPEN) {
if ( !FlushFileBuffers((HANDLE)_get_osfhandle(filedes))
) {
retval = GetLastError();
} else {
retval = 0; /* return success */
}
/* map the OS return code to C errno value and return
code */
if (retval == 0) {
goto good;
} else {
_doserrno = retval;
goto bad;
}
}
bad :
errno = EBADF;
retval = -1;
good :
_unlock_fh(filedes);
return (retval);
}
From | Date | Subject | |
---|---|---|---|
Next Message | Gavin Sherry | 2003-02-03 23:03:46 | Re: Win32 and fsync() |
Previous Message | Dave Page | 2003-02-03 22:58:34 | Re: Win32 and fsync() |