diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/memory.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/memory.c index 5b8c1cba29f..18ff0628fa7 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/memory.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/memory.c @@ -292,7 +292,8 @@ BOOLEAN DosResizeMemory(WORD BlockData, WORD NewSize, WORD *MaxAvailable) NewSize); /* Just split the block */ - NextMcb = SEGMENT_TO_MCB(Segment + NewSize + 1); + NextSegment = Segment + NewSize + 1; + NextMcb = SEGMENT_TO_MCB(NextSegment); NextMcb->BlockType = Mcb->BlockType; NextMcb->Size = Mcb->Size - NewSize - 1; NextMcb->OwnerPsp = 0; @@ -300,6 +301,9 @@ BOOLEAN DosResizeMemory(WORD BlockData, WORD NewSize, WORD *MaxAvailable) /* Update the MCB */ Mcb->BlockType = 'M'; Mcb->Size = NewSize; + + /* Combine this free block with adjoining free blocks */ + DosCombineFreeBlocks(NextSegment); } Done: diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/process.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/process.c index 46c77c6f0a1..ba91b9168fc 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/process.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/process.c @@ -198,7 +198,7 @@ VOID DosCreatePsp(WORD Segment, WORD ProgramSize) PspBlock->Exit[1] = 0x20; /* Set the number of the last paragraph */ - PspBlock->LastParagraph = Segment + ProgramSize - 1; + PspBlock->LastParagraph = Segment + ProgramSize; /* Save the interrupt vectors */ PspBlock->TerminateAddress = IntVecTable[0x22];