|
Boost : |
From: Wilbur Lang (wilburlang_at_[hidden])
Date: 2007-07-17 07:08:07
Hi,
another problems in the same file.
A) problem of align
because mmap() requires:
1. offset should be a multiple of page size
2. the address start must be a multiple of page size.
we have to align the offset and start to page size.
for code snip begin from line 444,
=====================================
if(address){
address = static_cast<const char*>(address) - m_extra_offset;
}
=====================================
you make a wrong alignment for address.
for example construct a mapped_region object with offset=1 and
address=0x3f000002. m_extra_offset is 1, and calculated address is
0x3f000001 which is not page size aligned. another member variable have
to imported to record the offset of address and m_base.
B) problem of m_size under windows
in some case, the m_size is zero (0) under windows.
code snipp begin at line 327 (mapped_region::flush)
=====================================
if(numbytes == 0) {
numbytes = m_size - offset;
}
=====================================
if m_size is 0, numbytes is a negative.
for the problem A, I do suggest m_base/m_offset is the real value not
adjusted value. then we just adjust this value in
get_size()/get_address()/get_offset() like this:
get_size()
{
if(m_size == 0)
return m_size;
return m_size - m_extra_offset;
}
get_address()
{
return static_cast<char* >(m_base) + m_extra_offset;
}
get_offset()
{
return m_offset + m_extra_offset;
}
Best Regards,
Wilbur Lang
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk