From: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
To: Erik Faye-Lund <kusmabite@gmail.com>
Cc: Johannes Sixt <j.sixt@viscovery.net>,
Ramsay Jones <ramsay@ramsay1.demon.co.uk>,
Junio C Hamano <gitster@pobox.com>,
Git Mailing List <git@vger.kernel.org>
Subject: Re: What's cooking in git.git (Apr 2012, #06; Sun, 15)
Date: Sat, 21 Apr 2012 10:00:18 +0700 [thread overview]
Message-ID: <20120421030018.GA32687@do> (raw)
In-Reply-To: <CABPQNSa7NiK=baYbDBENt-An0mFGn1i+GPnN_=LpqAVScXrG2w@mail.gmail.com>
On Thu, Apr 19, 2012 at 03:52:44PM +0200, Erik Faye-Lund wrote:
> On Thu, Apr 19, 2012 at 3:48 PM, Johannes Sixt <j.sixt@viscovery.net> wrote:
> > Am 4/19/2012 15:31, schrieb Erik Faye-Lund:
> >> int main(int argc, const char *argv[])
> >> {
> >> int i, fd = open(__FILE__, O_RDONLY);
> >> for (i = 0; i < 2; ++i) {
> >> char buf[11] = {0};
> >> mingw_pread(fd, buf, 10, 0);
> >> printf("buf = '%10s'\n", buf);
> >> }
> >> return 0;
> >> }
> >
> > The test is flawed. It shows only that pread can read twice the same file
> > location.
>
> Oh, you are of course right. *slaps forehead*
>
> > But it must not update the file pointer, whereas the
> > documentation of ReadFile says (quoting the paragraph that is relevant for
> > us):
> >
> > If hFile is not opened with FILE_FLAG_OVERLAPPED and lpOverlapped is
> > not NULL, the read operation starts at the offset that is specified in
> > the OVERLAPPED structure. ReadFile does not return until the read
> > operation is complete, and then the system updates the file pointer.
>
> Indeed. Correcting the test to first do pread and then read reveals
> that the file pointer does indeed get updated. Grrr...
>
> > Hence, your mingw_pread() looks like a workable solution for our purposes,
> > but is still not a 100% correct emulation of pread(). (Testing all this
> > will have to wait for another 18 hours or so.)
> >
>
> I don't know our use-cases, but I'd be a lot happier if I could find a
> safe way to have it not update the file-pointer. Just reading it and
> setting it back again would be racy.
Replace pread() in index-pack to pread_weak() because we know we don't
care about file offset in index-pack. Define pread_weak as pread
normally. Windows port can provide its own pread_weak version, which
can freely move file offset.
--
Duy
next prev parent reply other threads:[~2012-04-21 3:03 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-16 6:44 What's cooking in git.git (Apr 2012, #06; Sun, 15) Junio C Hamano
2012-04-16 9:07 ` Nelson Benitez Leon
2012-04-16 8:20 ` Junio C Hamano
2012-04-16 11:24 ` Nelson Benitez Leon
2012-04-16 15:03 ` Junio C Hamano
2012-04-18 7:15 ` Johannes Sixt
2012-04-18 19:53 ` Ramsay Jones
2012-04-19 6:16 ` Johannes Sixt
2012-04-19 6:45 ` Johannes Sixt
2012-04-19 7:02 ` Nguyen Thai Ngoc Duy
2012-04-19 9:36 ` Nguyen Thai Ngoc Duy
2012-04-19 12:58 ` Erik Faye-Lund
2012-04-19 13:18 ` Nguyen Thai Ngoc Duy
2012-04-19 13:31 ` Erik Faye-Lund
2012-04-19 13:38 ` Nguyen Thai Ngoc Duy
2012-04-19 13:48 ` Johannes Sixt
2012-04-19 13:52 ` Erik Faye-Lund
2012-04-21 3:00 ` Nguyen Thai Ngoc Duy [this message]
2012-04-21 5:46 ` Nguyen Thai Ngoc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120421030018.GA32687@do \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j.sixt@viscovery.net \
--cc=kusmabite@gmail.com \
--cc=ramsay@ramsay1.demon.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.