Re: 1352 NUL bytes at the end of a page? (was Re: Assertion `s && s->tree' failed: The saga continues.)

Larry McVoy
2004-05-17T14:52:29Z

On Mon, May 17, 2004 at 07:32:44AM -0700, Linus Torvalds wrote:
> My claim (which may be bogus, but isn't), is that you wrote the file with
> a buffered interface like stdio (or your own buffers), and that the buffer
> size is likely a nice round number like 8kB or something. I think that's
> what stdio uses by default.

Yup, that's what we do.

> And at some point earlier in the process you did an fflush(), or somebody
> else had written a header of n*PAGE_SIZE + 0x4ff bytes, or something like
> that. Since this was the ChangeSet file, I suspect that the "header" is
> the checkin-comment section at the beginning, and the "second phase" is
> the actual key list thing. You know how you write the ChangeSet file
> better than I do.

I don't think we flush along the way but let me look. Whoops, you're right,
we do. Right where you thought too. But that doesn't explain there being
3 blocks of nulls (there should NEVER be a null in the s.ChangeSet file, we
don't compress that, it's always ascii).

But the bigger problem is that you are missing the point that I mentioned
elsewhere, we are writing to a tmp file, the tmp file is NOT mmapped.
We mmap only after that file is closed and renamed. We don't map the
tmp file.
--
---
Larry McVoy lm at bitmover.com http://www.bitkeeper.com