[M3devel] gettimeofday called from CheckLoadTracedRef?
Mika Nystrom
mika at async.caltech.edu
Sat May 23 22:34:16 CEST 2009
Hi Modula-3ers, especially Tony,
I'm seeing the following behavior a lot in a program I'm running:
#0 0x68ecbba7 in gettimeofday () from /lib/libc.so.5
#1 0x68611cb9 in Now () at ../src/time/POSIX/TimePosix.m3:16
#2 0x685ecf06 in CollectorOn (timeOnEntry=Invalid C/C++ type code 30 in symbol table.
) at ../src/runtime/common/RTCollector.m3:674
#3 0x685f2476 in CheckLoadTracedRef (ref=Invalid C/C++ type code 46 in symbol table.
) at ../src/runtime/common/RTCollector.m3:2271
#4 0x68139379 in Get (tbl=Invalid C/C++ type code 26 in symbol table.
)
at ../FreeBSD4/SortedTotalOrderLRTbl.m3 => /usr/local/cm3/pkg/libm3/src/sortedtable/SortedTable.mg:145
Is it normal for CheckLoadTracedRef to make system calls?
Hmm, why is it even doing CheckLoadTracedRef? Here's the code (from SortedTable.mg):
PROCEDURE Get ( tbl : Default;
READONLY k : Key.T;
VAR(*OUT*) v : Value.T): BOOLEAN =
VAR
x : Node := tbl.h.hi;
cmp : Cmp;
BEGIN
WHILE (x # NIL) DO
cmp := tbl.keyCompare (k, x.key);
IF cmp = 0 THEN v := x.value; RETURN TRUE; END;
IF (cmp < 0)
THEN x := x.lo; (* line 145 *)
ELSE x := x.hi;
END;
END;
RETURN FALSE;
END Get;
where Node is defined as
TYPE
Node = REF RECORD
key : Key.T;
value : Value.T;
lo : Node := NIL;
hi : Node := NIL;
priority: INTEGER (* random num; tree is a heap on these *)
END;
It seems odd to me that, under these circumstances, x := x.lo would
cause any sort of checking activity...
I'm using a CM3 that's about a month old, on FreeBSD4.
Mika
P.S. Needless to say, the code in question runs about 10x faster under
PM3 than with this relatively new CM3... but my m3gdb is having trouble
with PM3's LONGREALs for some reason.
More information about the M3devel
mailing list