Re: Pike 8.0 release 1116

2022-04-28 Thread David Estopa

Hi, William.

Thaks for your response. I appreciated it.

I'm triing to reproduce the problem with a more basic program, and some 
constants autogenerated, but we obtain another diferent error or 
limitation on the tests.


It seems that there is a limit when you define more than 64K constants 
with .h files:


Up to 64K constants a pike will compile correctly  (32 files .h with 
2001 constants each one) .


After include the 33rth file, seems that exceeds the current capacity: 
'too many identifiers'.


datos_33.h:1549:Too many identifier_references.
datos_33.h:1550:Too many identifiers.
Violación de segmento (`core' generado)

I've done the test in two systems:
  Rocky   with    4GB RAM  Pike v8.0 release 1116
  Mint19 with  15GB RAM  Pike v8.0 release 498

If I compare this situation whith the other one, that results in the 
malloc error (corrupted size vs. prev_size) is not really comprensible, 
because the program that fails

does not exceed these limits, but fails when I add a new .h.


** malloc error    (corrupted size vs. prev_size)
number of constants in .h files:  1545
size of .h files .:   680KB


** max constants error  (Too many identifiers.)
number of constants in .h files: Fine up to 64.000 (up to 33.h)
total size for the 40 .h files..:   298MB

As you can see I'm getting the malloc error with only 1500 constants 
defined (<64K)  and no more thant 1MB of data payload.


Below you have the content of 3 files to autogenerate the .h payload and 
test these situations:

First run with includes commented to generate a payload.
Then run with the include.h enabled to see the result.

$ cat include_0.h
constant SALTO="\n\n";


$ cat includes.h
#ifndef INCLUDES_H
#define INCLUDES_H
#include "./datos_1.h"
#include "./datos_2.h"
#include "./datos_3.h"
#include "./datos_4.h"
#include "./datos_5.h"
#include "./datos_6.h"
#include "./datos_7.h"
#include "./datos_8.h"
#include "./datos_9.h"
#include "./datos_10.h"
#include "./datos_11.h"
#include "./datos_12.h"
#include "./datos_13.h"
#include "./datos_14.h"
#include "./datos_15.h"
#include "./datos_16.h"
#include "./datos_17.h"
#include "./datos_18.h"
#include "./datos_19.h"
#include "./datos_20.h"
#include "./datos_21.h"
#include "./datos_22.h"
#include "./datos_23.h"
#include "./datos_24.h"
#include "./datos_25.h"
#include "./datos_26.h"
#include "./datos_27.h"
#include "./datos_28.h"
#include "./datos_29.h"
#include "./datos_30.h"
#include "./datos_31.h"
#include "./datos_32.h"
#include "./datos_33.h"
#include "./datos_34.h"
#include "./datos_35.h"
#include "./datos_36.h"
#include "./datos_37.h"
#include "./datos_38.h"
#include "./datos_39.h"
#include "./datos_40.h"
#endif


$ cat includes.pike
#!/usr/bin/pike
#include "./include_0.h"

//Once autogenerated the payload, uncomment next line to include the of 
h files:  datos 1 a 40

//  #include "./includes.h"

int main()
{
    string 
PAYLOAD="ABB";

PAYLOAD=PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+
PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+
PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD+PAYLOAD;

    for (int i=1;i<=40; i++)
    {
    string f="./datos_"+i+".h";
    if (Stdio.is_file(f))
    continue;
    else
    Stdio.stdout.write("#include \"./datos_"+i+".h\"\n");

string AUX=""+
"#ifdef DATOS_"+i+"_H\n"+
"#warning Ya se ha hecho include previamente del fichero de constantes 
tsa_mail_ES.h\n"+

"\n"+
"#else\n"+
"#define DATOS_"+i+"_H\n"+
"\n";
    Stdio.append_file(f, AUX);

    for (int j=0; j<2000; j++)
    {
    Stdio.append_file(f, "constant 
CT_"+i+"_"+j+"=\""+PAYLOAD+"\"\+SALTO;\n");

    }

    Stdio.append_file(f, "\n#endif\n");
    }

   Stdio.stdout.write("ALL DONE!\n");

   thread_create(nothing);
   return -1;
}

void nothing()
{
while(1)
{
sleep(1);
}
}


On the test callbacks are enabled only to reproduce another running 
condition.


If anyone has more ideas to try, comments will be appreciated.

Best Regards

David Estopà




El 28/4/22 a las 2:56, H William Welliver escribió:

Just a quick update: I wrote a (basically empty) program that included 20 empty 
files and had no problems on 8.0.1116. So there must be something more to it. 
If you can find a minimal test case, we might have better luck.

Bill


On Apr 26, 2022, at 11:01 AM, David Estopa  wrote:

Hello, Friends of Pike!

On Pike 8.0 1116,   have anybody experienced similar malloc error trying to 
include several .h files into a program?

   malloc(): invalid next size (unsorted)
   corrupted size vs. prev_size

My program includes several .h to define several languages constants. If I 
include 18 works fine, but cannot include one more.

Is there a max size limit to include files into a pike program?

Thanks in advance.


Re: Pike 8.0 release 1116

2022-04-27 Thread H William Welliver
Just a quick update: I wrote a (basically empty) program that included 20 empty 
files and had no problems on 8.0.1116. So there must be something more to it. 
If you can find a minimal test case, we might have better luck.

Bill

> On Apr 26, 2022, at 11:01 AM, David Estopa  wrote:
> 
> Hello, Friends of Pike!
> 
> On Pike 8.0 1116,   have anybody experienced similar malloc error trying to 
> include several .h files into a program?
> 
>   malloc(): invalid next size (unsorted)
>   corrupted size vs. prev_size
> 
> My program includes several .h to define several languages constants. If I 
> include 18 works fine, but cannot include one more.
> 
> Is there a max size limit to include files into a pike program?
> 
> Thanks in advance.
> 
> David Estopà
> 



Re: Pike 8.0 release 1116

2022-04-27 Thread william

Hi David-

I'm not aware of a limitation... is it possible you have a circular 
reference somewhere? Do you suspect an overall size limitation, or do 
you think it's because of the number of includes? Removing the content 
from one or more of the files might give an indication of one vs the 
other.


Is this a problem you're discovering right after switching to 8.0.1116, 
or have you been using that version for a while?


Bill

On 2022-04-26 11:01, David Estopa wrote:

Hello, Friends of Pike!

On Pike 8.0 1116,   have anybody experienced similar malloc error
trying to include several .h files into a program?

  malloc(): invalid next size (unsorted)
  corrupted size vs. prev_size

My program includes several .h to define several languages constants.
If I include 18 works fine, but cannot include one more.

Is there a max size limit to include files into a pike program?

Thanks in advance.

David Estopà




Pike 8.0 release 1116

2022-04-26 Thread David Estopa

Hello, Friends of Pike!

On Pike 8.0 1116,   have anybody experienced similar malloc error trying 
to include several .h files into a program?


  malloc(): invalid next size (unsorted)
  corrupted size vs. prev_size

My program includes several .h to define several languages constants. If 
I include 18 works fine, but cannot include one more.


Is there a max size limit to include files into a pike program?

Thanks in advance.

David Estopà