TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: Denis Tonn
from: Patrick Haller
date: 1996-11-19 06:26:08
subject: I couldn`t get xalloc ex

Hi Denis!

[..]
 DT>  Rather than memman=noswap, try memman=commit.. It will preallocate 
 DT> swapspace at the time of your allocmem, and if there is not enough 
 DT> will give the above indication. 
I rather think you get the harderr daemon message popped up. Or your process
will be terminated automatically if you specified AUTOFAIL. I wouldn't expect
the apps to receive a ERROR_NOT_ENOUGH_MEMORY in this case either.

[..]
 DT>  Not really. You are getting page tables mixed up with desciptor 
 DT> tables. Each process has it's own LDT. 
Yes, you're right. I noticed this after I had the mail already sent. However
this transfers the effect only to the application page table. By running
out of table entries, this is the only way to have the kernel return
ERROR_NOT_ENOUGH_MEMORY besides setting MEMMAN to NOSWAP.

Even parts of the system interna do not handle a out-of-memory situation properly.
Anything on the kernel side seems to be OK for me. But PM and WPS plus apps
couse very fast a system hang when the working set exceeds the physical amount
of memory in the noswap-configuration.
Nevertheless NT crashes on such a situation as well.

[..]
 DT>  I suspect what you are thinking of is the situation when the shared 
 DT> arena grows down to the highest address that the application with the 
 DT> largest private arena has grown to. If this condition is reached, then
 DT> only this app will fail a private alloc, but ALL processes will fail a 
 DT> shared alloc.  This is usually caused by a memory leak. In the private
 DT> address space of some app, or an app that is allocating shared
 DT> addresses.
Hmm, if I recall correctly, most Warp kernels allocate tiled memory in every case.
Therefore each DosAllocMem occupies an entry in the descriptor table for a 64k
segment at least (16-bit alias selectors). The Warp Server kernels (maybe post-GA)
are said to lift the 512MB limit. So I think DosAllocMem will NOT always allocate
tiled memory on those kernels.


#define INCL_DOS
#include 

#include 

main()
{
  int i;
  APIRET rc;
  char *p;
  
  for (i=0;
       i<10000;
       i++)
  {
    rc = DosAllocMem(&p,
                     4096,
                     PAG_READ | PAG_WRITE | PAG_COMMIT);
    printf("alloc %u returned #%u.\n",i,rc);
  }
}

     __
     |_)
cu/2 |atrick
[Team  OS/2]

--- FleetStreet 1.18+
* Origin: OS/2 Bodensee ! (2:246/2315.18)
SEEN-BY: 50/99 270/101 620/243 625/160 711/401 409 410 413 430 808 809 934
SEEN-BY: 711/955 712/407 515 624 628 713/317 800/1
@PATH: 246/2315 2300 2340 10 240/5202 5010 2433/225 270/101 712/515 711/808
@PATH: 711/934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.