Aldevinas Katkus
12-27-22
Operating system: Windows
I am importing/updating 7000+ Contacts (CUVc) from a tab separated file. Import crashes with Failed to allocate virtual memory, GetMemPages() failed, sometimes without any message.
I splitted contacts file to smaller, 2K contacts only. The first file imported fine, then immediately the second one crashed. After restarting the exe the same second file imported successfully. I suspect memory leaks. 
If I try to put a few lines into the test file before and after the line which caused the crash, everything is fine.
Can RecordNew() or smth else leave memory leaks in single user mode while it does not in client server mode?
GetCustomer2() is being used elsewhwere every day for half a year without problems, but max number of calls in a loop can be tens, not thousands.
Crash happens in 2021-04-18 and 2022-11-25 versions.
Code:
while (NextImportLine(false)) begin
  RecordClear(tCUr);//clear temporary record
  RecordClear(Mailr);//workaround for crash with 7K+ lines
  tCUr.Comment2 = ImportField;
....
  if (testf) then begin
       tstr = StripNonDigits(tCUr.RegNr1);
      if ((nonblank(tstr)) and (nonblank(tCUr.Name))) then begin
        LogText(0,"GetCustomer2 " & tstr & " " & tCUr.Name);
        custok = GetCustomer2(tstr,tCUr.Name,"",0,CUr,Mailr,problemf,false);//crash here
      end;
...
end;
GetCustomer2() returns a new or existing CUVc if found one:
global
updating function boolean GetCustomer2(string code,string name,string newcustcat,integer logtype,var record CUVc CUr,var record MailVc Mailr,var boolean problemf,boolean useaddresslookup)
begin
...
  RecordClear(CUr);
  CUr.RegNr1 = code;
  if ReadFirstKey("RegNr1",CUr,1,true) then begin
    cufoundf = true;
  end else begin
    CUr.Name = name;
    if ReadFirstKey("Name",CUr,1,true) then begin
      cufoundf = true;
    end;
  end;
  if (cufoundf) then begin
    res = true;
  end;
  if (!cufoundf) then begin
    if (NameIsCompany(name)) then begin
      RecordNew(CUr);
  ....
     if (RecordInsert(CUr,false)) then begin
        res = true;
...