Actions:
|
2011-08-23 09:54 AEST by Arthur Barrett - Also see bug 6242 - original report from customer.
08:22:00: S -> Determine if 173241208 < 2147418111
08:22:00: S -> Need to tell user to enable /3GB mode on server (2).
08:22:00: S -> receive_file() not enough memory to complete
08:22:00: S -> Enable /3GB mode on Server to allow server to allocate 4363484 KB memory.
08:22:00: S -> receive_file() low memory not allowed - abort
08:22:00: S -> set LowMemOK=1 on server to override
The actual file form the client is 38MB, the server is trying to allocate a much larger amount of memory,
presumably due to the size of the RCS file.
The server should realise that 4GB is a LOT of memory, and disproportionate to the 38MB size of this
transaction and use the other algorithm for processing the update (ie: do not load all the RCS file into
memory). |
|
2011-08-23 11:29 AEST by Arthur Barrett - This code:
TRACE(level,"Determine if %lu < %lu",(unsigned long)((statex.ullTotalPhys-statex.ullAvailPhys)+
(3*bytes)),(unsigned long)sysinfo.lpMaximumApplicationAddress);
Because it uses unsigned long, cannot display more than 4,294,967,295 bytes.
So in this case where the bytes are 4,350,267,392 it incorrectly reports it as 173,241,208!
Need to use this instead?
TRACE(level,"Determine if %lu Kbytes < %lu",(unsigned long)((statex.ullTotalPhys-statex.ullAvailPhys)+
(3*bytes))/MEMDIV,(unsigned long)sysinfo.lpMaximumApplicationAddress);
Comparisons like this are OK because they resolve to DWORDLONG:
if (statex.ullTotalPhys<((statex.ullTotalPhys-statex.ullAvailPhys)+(3*bytes)))
|