mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-23 05:44:41 +02:00
DosUmbLink no longer tries to merge free blocks. Also cleaned up a bit.
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@968 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
3f72bd1865
commit
7a9c620d82
@ -1142,7 +1142,7 @@ dispatch:
|
|||||||
case 0x03:
|
case 0x03:
|
||||||
if (uppermem_root != 0xffff) /* always error if not exists */
|
if (uppermem_root != 0xffff) /* always error if not exists */
|
||||||
{
|
{
|
||||||
DosUmbLink(lr.BL);
|
DosUmbLink(lr.BX);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* else fall through */
|
/* else fall through */
|
||||||
|
@ -119,7 +119,7 @@ searchAgain:
|
|||||||
/*
|
/*
|
||||||
Hack to the Umb Region direct for now. Save time and program space.
|
Hack to the Umb Region direct for now. Save time and program space.
|
||||||
*/
|
*/
|
||||||
if (uppermem_link && uppermem_root != 0xffff)
|
if ((uppermem_link & 1) && uppermem_root != 0xffff)
|
||||||
{
|
{
|
||||||
COUNT tmpmode = (mode == LARGEST ? mem_access_mode : mode);
|
COUNT tmpmode = (mode == LARGEST ? mem_access_mode : mode);
|
||||||
if ((mode != LARGEST || size == 0xffff) &&
|
if ((mode != LARGEST || size == 0xffff) &&
|
||||||
@ -189,7 +189,7 @@ searchAgain:
|
|||||||
if (!foundSeg || !foundSeg->m_size)
|
if (!foundSeg || !foundSeg->m_size)
|
||||||
{ /* no block to fullfill the request */
|
{ /* no block to fullfill the request */
|
||||||
if ((mode != LARGEST) && (mode & FIRST_FIT_U) &&
|
if ((mode != LARGEST) && (mode & FIRST_FIT_U) &&
|
||||||
uppermem_link && uppermem_root != 0xffff)
|
(uppermem_link & 1) && uppermem_root != 0xffff)
|
||||||
{
|
{
|
||||||
mode &= ~FIRST_FIT_U;
|
mode &= ~FIRST_FIT_U;
|
||||||
goto searchAgain;
|
goto searchAgain;
|
||||||
@ -401,7 +401,7 @@ COUNT DosMemCheck(void)
|
|||||||
COUNT FreeProcessMem(UWORD ps)
|
COUNT FreeProcessMem(UWORD ps)
|
||||||
{
|
{
|
||||||
mcb FAR *p;
|
mcb FAR *p;
|
||||||
BYTE oldumbstate = uppermem_link;
|
BYTE oldumbstate = uppermem_link & 1;
|
||||||
|
|
||||||
/* link in upper memory to free those , too */
|
/* link in upper memory to free those , too */
|
||||||
DosUmbLink(1);
|
DosUmbLink(1);
|
||||||
@ -455,7 +455,7 @@ VOID mcb_print(mcb FAR * mcbp)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VOID DosUmbLink(BYTE n)
|
void DosUmbLink(unsigned n)
|
||||||
{
|
{
|
||||||
REG mcb FAR *p;
|
REG mcb FAR *p;
|
||||||
REG mcb FAR *q;
|
REG mcb FAR *q;
|
||||||
@ -463,37 +463,26 @@ VOID DosUmbLink(BYTE n)
|
|||||||
if (uppermem_root == 0xffff)
|
if (uppermem_root == 0xffff)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
q = p = para2far(first_mcb);
|
p = para2far(first_mcb);
|
||||||
/* like a xor thing! */
|
if (n > 1 || (uppermem_link & 1) == n)
|
||||||
if ((uppermem_link == 1) && (n == 0))
|
return;
|
||||||
|
while (FP_SEG(p) != uppermem_root && p->m_type != MCB_LAST)
|
||||||
{
|
{
|
||||||
while (FP_SEG(p) != uppermem_root)
|
if (!mcbValid(p))
|
||||||
{
|
return;
|
||||||
if (mcbFree(p))
|
q = p;
|
||||||
joinMCBs(FP_SEG(p));
|
p = nxtMCB(p);
|
||||||
if (!mcbValid(p))
|
}
|
||||||
return;
|
if (n == 0)
|
||||||
q = p;
|
{
|
||||||
p = nxtMCB(p);
|
if (q->m_type == MCB_NORMAL && FP_SEG(p) == uppermem_root)
|
||||||
}
|
|
||||||
|
|
||||||
if (q->m_type == MCB_NORMAL)
|
|
||||||
q->m_type = MCB_LAST;
|
q->m_type = MCB_LAST;
|
||||||
uppermem_link = n;
|
|
||||||
|
|
||||||
}
|
|
||||||
else if ((uppermem_link == 0) && (n == 1))
|
|
||||||
{
|
|
||||||
while (q->m_type != MCB_LAST)
|
|
||||||
{
|
|
||||||
if (!mcbValid(q))
|
|
||||||
return;
|
|
||||||
q = nxtMCB(q);
|
|
||||||
}
|
|
||||||
|
|
||||||
q->m_type = MCB_NORMAL;
|
|
||||||
uppermem_link = n;
|
|
||||||
}
|
}
|
||||||
|
else if (p->m_type == MCB_LAST)
|
||||||
|
p->m_type = MCB_NORMAL;
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
uppermem_link = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -248,7 +248,7 @@ COUNT DosMemCheck(void);
|
|||||||
COUNT FreeProcessMem(UWORD ps);
|
COUNT FreeProcessMem(UWORD ps);
|
||||||
COUNT DosGetLargestBlock(UWORD * block);
|
COUNT DosGetLargestBlock(UWORD * block);
|
||||||
VOID show_chain(void);
|
VOID show_chain(void);
|
||||||
VOID DosUmbLink(BYTE n);
|
void DosUmbLink(unsigned n);
|
||||||
VOID mcb_print(mcb FAR * mcbp);
|
VOID mcb_print(mcb FAR * mcbp);
|
||||||
|
|
||||||
/* lfnapi.c */
|
/* lfnapi.c */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user