[M3devel] Calling RTHeapStats.ReportReachable(); with Pthread cvs head
Tony Hosking
hosking at cs.purdue.edu
Mon Oct 22 15:00:03 CEST 2007
I know what the problem is, and will fix it when I can.
On Oct 21, 2007, at 6:03 PM, Daniel Alejandro Benavides D. wrote:
> Hi:
> Im trying to execute the following program with the Pthread cvs
> head implementation and I got this when executing the program:
>
> danielb at danielb-desktop:~/as207/code/m3gdb$ LINUXLIBC6/Main
> Entre dos enteros6 7
> Estadisticas del Heap
> HEAP: 0xb73d2000 .. 0xb7412000 => 0.2 Mbytes
>
>
> ***
> *** runtime error:
> *** <*ASSERT*> failed.
> *** file "../src/thread/PTHREAD/ThreadPThread.m3", line 992
> ***
>
> Aborted
> danielb at danielb-desktop:~/as207/code/m3gdb$
>
> The assert violated in m3core/thread/PTHREAD/ThreadPthread.m3 is this:
> PROCEDURE ProcessOther (act: Activation; p: PROCEDURE (start,
> stop: ADDRESS)) =
> (* LL=activeMu *)
> VAR
> sp: ADDRESS;
> state: RTMachine.ThreadState;
> BEGIN
> <*ASSERT act.state = ActState.Stopped*>
>
>
> The source code of the little program is this:
>
> MODULE Main;
>
> IMPORT SIO;
> IMPORT RTHeapStats;
> IMPORT RTutils;
> IMPORT RTHeapDebug;
> VAR
> varA, varB, varC: INTEGER;
>
>
> PROCEDURE multiplicar(a,b: INTEGER): INTEGER=
> VAR
> varC: INTEGER;
> BEGIN
> varC:=a*b;
> RETURN varC;
> END multiplicar;
>
>
> BEGIN
>
> SIO.PutText("Entre dos enteros");
> varA:=SIO.GetInt();
> varB:=SIO.GetInt();
> varC:=multiplicar(varA,varB);
> SIO.PutText("Estadisticas del Heap");
> RTHeapDebug.CheckHeap();
> RTHeapStats.ReportReachable();
> (* RTutils.Heap
> (FALSE,RTutils.HeapPresentation.ByTypecode,TRUE,LAST(CARDINAL));*)
> SIO.PutInt(varC);
>
> END Main.
>
> According to the draft book of Michael Dagenais Building
> Distributed OO Applications: Modula-3 Objects at Work,
> RTHeapStats.ReportReachable()
> " ... is called to determine the number
> of active, reachable, objects (i.e. those which would not be
> garbage collected). Of the 1980 objects on the heap, only slightly
> more than half are still alive."
>
> According to the interface documentation:
> "reports the number of reachable objects and bytes from each
> compilation unit, thread stack, and the individual roots that reach
> the most bytes. The report is written to stderr. The Modula-3
> process is frozen during the scanning and reporting."
>
> Obviously with the previous version of pthread the things were
> working fine, also with user level implementation
>
> Thanks,
>
> Daniel Benavides
>
>
> Sé un Mejor Amante del Cine
> ¿Quieres saber cómo? ¡Deja que otras personas te ayuden! .
More information about the M3devel
mailing list