apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Stoddard" <b...@wstoddard.com>
Subject RE: [PATCH] Support APR_APPEND (O_APPEND) with apr_file_write on Windows
Date Fri, 25 Oct 2002 17:52:48 GMT

> > > At 09:27 AM 10/25/2002, Bill Stoddard wrote:
> > > >The only problem with this patch [...]
> > > >
> > > >--- readwrite.c 19 Sep 2002 12:20:20 -0000      1.1.1.1
> > > >+++ readwrite.c 25 Oct 2002 13:44:53 -0000
> > > >-        if (thefile->pOverlapped && !thefile->pipe) {
> > > >-            thefile->pOverlapped->Offset     =
> (DWORD)thefile->filePtr;
> > > >-            thefile->pOverlapped->OffsetHigh =
> > > (DWORD)(thefile->filePtr >>
> > > >32);
> > > >-        }
> > > >-        else if (!thefile->pipe && thefile->append) {
> > > >+        if (thefile->append && !thefile->pipe) {
> > > >+            int rc;
> > > >+            rc = apr_file_lock(thefile, APR_FLOCK_EXCLUSIVE);
> > > >+            if (rc != APR_SUCCESS) {
> > > >+                rc = APR_SUCCESS;
> > > >+            }
> > > >             SetFilePointer(thefile->filehand, 0, NULL, FILE_END);
> > >
> > > You can't just drop the Overlapped test.  there is NO CURRENT POSITION
> > > if you have opened a file for overlapped I/O.
> >
> > I know. Overlapped is not used when writing to the access log.
>
> But you are writing code for APR here, not Apache.  You can't gaurantee
> that nobody will try to use Overlapped with APPEND.
>

The point of my comment was that this is irrelevant for what I am interested
in talking about.

But since we are on the topic... APR_XTHREAD implies the file needs to be
opened for overlapped i/o.  Files opened for overlapped i/o don't HAVE OS
maintained file pointers. I assume (correct me if I am wrong) that
APR_APPEND has the same semantic meaning as Unix O_APPEND.  If that
assumption is correct, then passing in APR_XTHREAD|APR_FILE_APPEND on an
apr_file_open is not correct and should be flagged as an error at file open
time.  My inclination is to make the check at file_open time rather than in
this code.

Bill, passing in APR_FLOCK_SHARED fixed the problem. (hitting my forehead
and sounding like a Homer).

Bill


Mime
View raw message