Shm: Fix SetUsedSize()

This commit is contained in:
Alexey Rybalchenko 2021-09-20 12:08:47 +02:00
parent b442483dc3
commit e484bf4578
2 changed files with 8 additions and 1 deletions

View File

@ -88,6 +88,11 @@ struct ShmHeader
return HdrPtr(ptr)->refCount; return HdrPtr(ptr)->refCount;
} }
static uint16_t UserOffset(char* ptr)
{
return HdrPartSize() + HdrPtr(ptr)->userOffset;
}
static char* UserPtr(char* ptr) static char* UserPtr(char* ptr)
{ {
// [HdrOffset(uint16_t)][Hdr alignment][Hdr][user buffer alignment][user buffer] // [HdrOffset(uint16_t)][Hdr alignment][Hdr][user buffer alignment][user buffer]

View File

@ -217,7 +217,9 @@ class Message final : public fair::mq::Message
} else if (newSize <= fMeta.fSize) { } else if (newSize <= fMeta.fSize) {
try { try {
try { try {
char* ptr = fManager.ShrinkInPlace(newSize, fManager.GetAddressFromHandle(fMeta.fHandle, fMeta.fSegmentId), fMeta.fSegmentId); char* oldPtr = fManager.GetAddressFromHandle(fMeta.fHandle, fMeta.fSegmentId);
uint16_t userOffset = ShmHeader::UserOffset(oldPtr);
char* ptr = fManager.ShrinkInPlace(userOffset + newSize, oldPtr, fMeta.fSegmentId);
fLocalPtr = ShmHeader::UserPtr(ptr); fLocalPtr = ShmHeader::UserPtr(ptr);
fMeta.fSize = newSize; fMeta.fSize = newSize;
return true; return true;